Error code 모음/4. Python errors

python error: The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.

쟈누이 2020. 3. 17. 12:30
반응형

위 에러는 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://stackoverflow.com/questions/42522113/python-3-multiprocessing-same-function-with-different-args

 

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

https://stackoverflow.com/search?q=The+%22freeze_support%28%29%22+line+can+be+omitted+if+the+program+is+not+going+to+be+frozen+to+produce+an+executable.

 

Human verification

Stack Overflow | The World’s Largest Online Community for Developers

stackoverflow.com

 

반응형