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

Geo*_*rge 5 python-module multiprocessing python-multithreading python-3.x

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

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

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

然而,因为这__name__ == '__main__'始终是正确的__main__.py,这被证明是一个问题(请参阅多处理文档:https ://docs.python.org/3/library/multiprocessing.html )

我尝试了多种解决方案,范围从: pytgquabr.com:8182/58288945/using-multiprocessing-with-runpy 到基于文件的互文本,只允许main的内容运行一次,但多处理仍然表现得很奇怪(例如进程几乎死掉)一旦它们启动且没有错误日志)。

知道解决这个问题的“正确”方法是什么吗?

Mis*_*agi 4

仅当内部定义的对象在另一个进程中使用__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
Run Code Online (Sandbox Code Playgroud)