如何在__main__.py中处理 python3 多处理



Il 提出了问题,我不明白问题的原因(这似乎与我在其中一个子进程中使用烧瓶有关(。

请忽略此内容(由于赏金而无法删除(

本质上,在将 python 库作为模块运行时,我必须启动一些进程和/或池。

但是,由于__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

相关内容

  • 没有找到相关文章