如何在 __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