위 에러는 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()
일단..이렇게 이해는 하고 사용은 했는데..시간이 지날 수록 이해하는 것도 바뀌고
틀린 내용이 있을 수 있다..
만약에 내용이 틀릴 경우에는 댓글로...!!
참고 링크
Python 3 - Multiprocessing same function with different args
In python 3, I am trying to run the same function with multiple arguments at the same time. I am using multiprocessing in Python 3.5.2, Anaconda 4.1.1 (64-bit), in Windows 7. I am getting the follo...
stackoverflow.com
https://kite.com/python/docs/multiprocessing.freeze_support
Code Faster with Kite - AI Autocomplete & Docs for Python
Kite is a free AI-powered autocomplete for Python developers. Works 100% locally. Code faster with Kite's plugin for your editor, featuring Intelligent Snippets and Python docs.
kite.com
https://docs.python.org/ko/3/library/multiprocessing.html
multiprocessing — 프로세스 기반 병렬 처리 — Python 3.8.2 문서
multiprocessing 은 threading 모듈과 유사한 API를 사용하여 프로세스 스포닝(spawning)을 지원하는 패키지입니다. multiprocessing 패키지는 지역과 원격 동시성을 모두 제공하며 스레드 대신 서브 프로세스를 사용하여 전역 인터프리터 록 을 효과적으로 피합니다. 이것 때문에, multiprocessing 모듈은 프로그래머가 주어진 기계에서 다중 프로세서를 최대한 활용할 수 있게 합니다. 유닉스와 윈도우에서 모두 실행됩니다
docs.python.org
Human verification
Stack Overflow | The World’s Largest Online Community for Developers
stackoverflow.com