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

时间:2020-06-05 00:19:33

标签: python-3.x multiprocessing python-multithreading python-module

我提出了一个问题,我不明白引起该问题的真正原因(这似乎与我在其中一个子过程中使用烧瓶有关。)

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

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

但是,由于__name__ == '__main__'__main__.py中始终为真,因此这是一个问题(请参阅多处理文档:https://docs.python.org/3/library/multiprocessing.html

我尝试了多种解决方案,范围从:pytgquabr.com:8182/58288945/using-multiprocessing-with-runpy到基于文件的mutext,仅允许 main 的内容运行一次但是多处理的行为仍然很奇怪(例如,进程几乎在没有错误日志的情况下立即死亡)。

任何了解这种“正确”方式的想法是什么?

1 个答案:

答案 0 :(得分:1)

只有在另一个进程中使用__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