질문을 제기했습니다. 문제의 원인을 이해하지 못했습니다 (하위 프로세스 중 하나에서 플라스크를 사용하는 것과 관련이있는 것 같습니다).
무시하십시오 (바운티로 인해 삭제할 수 없음)
본질적으로 파이썬 라이브러리를 모듈로 실행할 때 일부 프로세스 및 / 또는 풀을 시작해야합니다.
그러나 이것이 __name__ == '__main__'
항상 사실 이기 때문에 __main__.py
문제가 될 수 있습니다 (다중 처리 문서 참조 : https://docs.python.org/3/library/multiprocessing.html )
나는 pytgquabr.com:8182/58288945/using-multiprocessing-with-runpy에서 파일 기반 mutext에 이르기까지 여러 솔루션을 시도하여 main 의 내용을 한 번만 실행할 수 있지만 다중 처리는 여전히 이상하게 작동합니다 (예 : 프로세스가 거의 종료 됨). 오류 로그없이 시작하자마자).
이것에 대해 "적절한"방법이 무엇인지 아십니까?
__main__
모듈 보호는 내부 에 정의 된 객체 __main__
가 다른 프로세스에서 사용되는 경우에만 필요합니다 . 이 정의를 찾는 __main__
것이 하위 프로세스에서 실행되는 원인 입니다.
를 __main__.py
사용할 때는와 함께 사용되는 모든 정의 multiprocessing
를 다른 모듈로 제한하십시오 . __main__.py
가져 와서 사용해야합니다.
# my_package/some_module.py
def module_print(*args, **kwargs):
"""Function defined in some module - fine for use inside multiprocess"""
print(*args, **kwargs)
# my_package/__main__.py
import multiprocessing # imports are allowed
from .some_module import module_print
def do_multiprocess():
"""Function defined in __main__ module - fine for use wrapping multiprocess"""
with multiprocessing.Pool(processes=12) as pool:
pool.map(module_print, range(20)) # multiprocessing external function is allowed
do_multiprocess() # directly calling __main__ function is allowed
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다