如何在 __main__.py 中处理 python3 多处理
How to deal with python3 multiprocessing in __main__.py
我提出的问题,我不明白问题的真正原因(这似乎与我在其中一个子流程中使用 flask 有关)。
请忽略这个(由于悬赏无法删除)
本质上,当 运行将 python 库作为模块时,我必须启动一些进程和/或池。
但是,由于 __name__ == '__main__'
在 __main__.py
中始终为真,这被证明是一个问题(请参阅多处理文档:https://docs.python.org/3/library/multiprocessing.html)
我尝试了多种解决方案,范围从:pytgquabr.com:8182/58288945/using-multiprocessing-with-运行py 到基于文件的互斥文本以仅允许 main 到 运行 一次,但多处理仍然表现得很奇怪(例如,进程几乎一开始就死掉,没有错误日志)。
知道 "proper" 的处理方法是什么吗?
仅当 __main__
内的 defined 对象在另一个进程中使用时,才需要保护 __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
我提出的问题,我不明白问题的真正原因(这似乎与我在其中一个子流程中使用 flask 有关)。
请忽略这个(由于悬赏无法删除)
本质上,当 运行将 python 库作为模块时,我必须启动一些进程和/或池。
但是,由于 __name__ == '__main__'
在 __main__.py
中始终为真,这被证明是一个问题(请参阅多处理文档:https://docs.python.org/3/library/multiprocessing.html)
我尝试了多种解决方案,范围从:pytgquabr.com:8182/58288945/using-multiprocessing-with-运行py 到基于文件的互斥文本以仅允许 main 到 运行 一次,但多处理仍然表现得很奇怪(例如,进程几乎一开始就死掉,没有错误日志)。
知道 "proper" 的处理方法是什么吗?
仅当 __main__
内的 defined 对象在另一个进程中使用时,才需要保护 __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