윈도우즈에선 멀티 프로세싱을 할때 에러가 나거나 불안정해지는 경우가 많다.
그래서 개발자는 맥이나 리눅스 쓴다.
그리고 멀티 프로세싱할 때 마지막에 꼭 close 해라, 작업관리자 켜보면 안닫은 거 전부 메모리
차지하고 있음
import time, os
import multiprocessing import Pool
def func(x):
return x[0] * x[1]
if __name__ == "__main__":
start = time.time()
num_pool = 2
pool = Pool(num_pool)
print(pool, map(func, zip(range(100), range(100))) # [[0, 0], [1, 1], [2, 2]....] 형태로 제네레이터
pool.close()
print("****run time(sec) :", int(time.time() - start))
pool에는 인수를 여러개 넣을 수 없다. 그러니 리스트로 넣든 어떻게 넣든 잘 넣는 게 중요하다.
매개변수가 여러개인데 pool로 굳이 돌리려면 매개변수를 하나만 받는 함수로 바꾸는 함수가 있다.
import time, os
import multiprocessing import Pool
import functools import partial
def func(x, y):
return x[0] * x[1]
partial(fucn, y=3) # 부분적으로 고정
if __name__ == "__main__":
start = time.time()
num_pool = 2
pool = Pool(num_pool)
print(pool, map(func, range(100)))
pool.close()
print("****run time(sec) :", int(time.time() - start))
그리고 주피터 노트북으로 실행할 때 같은 파일 내에서 함수를 지정하면 서브 프로세스가 그 함수를
찾질 못한다.
그래서 밖에 다른 파일을 만들어놓고 모듈로 import하면 주피터 노트북에서도 멀티 프로세싱을 할
수는 있다.
보통 터미널이나 파워쉘로 함
'파이썬' 카테고리의 다른 글
6주차, 정규식 (0) | 2022.01.29 |
---|---|
6주차, 파이썬 db (0) | 2022.01.29 |
6주차, 병렬처리, 프로세스, 쓰레드 (0) | 2022.01.28 |
6주차, 직렬화(인코딩) pickle, json (0) | 2022.01.28 |
6주차, 파일입출력, 인코딩, with open as, os.listdir (0) | 2022.01.28 |
댓글