이번편은 파이썬의 process에 대한 내용이다. 아래 process를 실행하면 process name과 id 값을 알 수 있고 id는 계속 실행하면 바뀌는 것을 확인할 수 있다.
import multiprocessing as mp
def Process():
proc = mp.current_process()
print(proc.name)
print(proc.pid)
Process()
MainProcess
1136
MainProcess
5936
이번에는 Subprocess라는 이름을 가진 process를 만들고 해당 process를 통해 Process_start라는 함수를 실행시켜 보자. Subprocess id도 확인이 가능하다.
import multiprocessing as mp
import time
def Process():
proc = mp.current_process()
print(proc.name)
print(proc.pid)
print("SubProcess End")
time.sleep(1)
if __name__ == "__main__":
proc = mp.current_process()
print(proc.name)
print(proc.pid)
p = mp.Process(name="SubProcess", target=Process)
p.start()
time.sleep(5)
print("MainProcess End")
MainProcess
8684
SubProcess
12096
SubProcess End
MainProcess End
이번에는 process를 생성하고 pool을 통해 병렬처리를 시켜보자. 아래 Pool(2)는 2개씩 병렬처리 한다는 뜻이다. 아래 파일을 실행시키면 함수가 2개씩 병렬 처리되는 것을 알 수 있고(결과의 pip를 보면 더 이해하기 쉽다) 이 값을 올리면 더 많은 함수가 병렬 처리된다.
from multiprocessing import Pool
import time
import os
def pool_test(value):
print(value, "pid : ", os.getpid())
time.sleep(1)
if __name__ == "__main__":
pool = Pool(2)
data = range(1, 10)
pool.map(pool_test, data)
pool.close()
pool.join()
1 pid : 5184
3 pid : 8844
4 pid : 8844
2 pid : 5184
5 pid : 5184
7 pid : 8844
6 pid : 5184
8 pid : 8844
9 pid : 8844
아래처럼 class에서도 multiprocess 수행이 가능하고 args를 통해 여러 인자또한 전달할 수 있다. 또한 is_alive()를 통해 process의 status가 True인지 False인지 확인이 가능하다. 처음 process를 수행시켰을떄는 True이지만 join 이후 process가 종료된 뒤에는 False로 출력되는 것을 확인할 수 있다.
import multiprocessing as mp
import os
import time
class Process_test:
def __init__(self):
pass
def run(self, *value):
for i in value:
pname = mp.current_process().name
print(pname, os.getpid(), i)
time.sleep(1)
if __name__ == "__main__":
w = Process_test()
p = mp.Process(name="Sub Process", target=w.run, args=("args1", "args2"))
p.start()
print("process status : ", p.is_alive())
p.join()
print("Main Process End")
print("process status : ", p.is_alive())
process status : True
Sub Process 10676 args1
Sub Process 10676 args2
Main Process End
process status : False
실행 중인 process는 강제로 죽일수도 있다. 어떻게 하는지는 자고 일어나서 내일 적어야지...
'Python > Study' 카테고리의 다른 글
python 기초 - Thread (쓰레드) - daemon, join, 객체 등 (0) | 2023.01.16 |
---|---|
python 기초 - queue (0) | 2023.01.16 |
python 기초 - decorator (0) | 2023.01.15 |
python 기초 - 변수가 있는지 확인하기 (hasattr / getattr / setattr) (0) | 2023.01.15 |
python 기초 - 지역변수, 전역변수, 동적변수 (local, global, globals 등) (0) | 2023.01.15 |