반응형
위 에러는 multiprocessing 을 실행할 때,
if __name__ == '__main__': 과 freeze_support( ) 를 사용하지 않고 실행했을 때
나타나는 에러이다.
우선 if __name__ == '__main__' 의 경우에는 이미 실행된 함수가
다른 객체에 할당되어 실행될때, 이전의 내용과 중복되어 실행되는 것을 막아주는 기능을 하는데
중복/반복을 막아 자원이 중복 사용되는 것을 막아주는 함수이다.
그리고 freeze_support( ) 의 경우에는 파이썬 multiprocessing 이 윈도우에서 실행될 경우, 자원이 부족할 경우를 대비해
파일 실행을 위한 자원을 추가해주는 역할을 하는 함수이다
그리고 효율 적인 자원 사용과 중복 방지를 위하여
if __name__ =='__main__' 과 freeze_support( ) 함수를 사용하라는 이야기이다
위 에러를 해결한 예제문은 이렇다
import multiprocessing as mp
from multiprocessing import freeze_support # freeze_support 함수 임포트
def washer(dishes, output):
for dish in dishes:
print("Washing", dish, 'dish')
output.put(dish)
def dryer(input):
while True:
dish = input.get()
print('Drying',dish,'dish')
input.task_done()
if __name__ == '__main__': # 중복 방지를 위한 사용
freeze_support() # 윈도우에서 파이썬이 자원을 효율적으로 사용하게 만들어준다.
dish_queue = mp.JoinableQueue()
dryer_proc = mp.Process(target = dryer, args = (dish_queue,))
dryer_proc.daemon = True
dryer_proc.start()
dishes = ['salad','bread','entree','dessert']
washer(dishes, dish_queue)
dish_queue.join()
일단..이렇게 이해는 하고 사용은 했는데..시간이 지날 수록 이해하는 것도 바뀌고
틀린 내용이 있을 수 있다..
만약에 내용이 틀릴 경우에는 댓글로...!!
참고 링크
https://kite.com/python/docs/multiprocessing.freeze_support
https://docs.python.org/ko/3/library/multiprocessing.html
반응형