Python 3.x 如何处理python3在main.py中的多处理

Python 3.x 如何处理python3在main.py中的多处理,python-3.x,multiprocessing,python-multithreading,python-module,Python 3.x,Multiprocessing,Python Multithreading,Python Module,我提出了一个问题,我不理解问题的真正原因(似乎与我在其中一个子流程中使用烧瓶有关) 请忽略此项(由于赏金原因无法删除) 本质上,当作为模块运行python库时,我必须启动一些进程和/或池 但是,由于\uuuu name\uuuu='\uuuuu main\uuuuu'在\uuuuu main\uuuuuuuuy.py中始终为真,这证明是一个问题(请参阅多处理文档:) 我尝试了多种解决方案,从:pytgquabr.com:8182/58288945/使用runpy的多处理到基于文件的mutext,

我提出了一个问题,我不理解问题的真正原因(似乎与我在其中一个子流程中使用烧瓶有关)

请忽略此项(由于赏金原因无法删除)

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

但是,由于
\uuuu name\uuuu='\uuuuu main\uuuuu'
\uuuuu main\uuuuuuuuy.py
中始终为真,这证明是一个问题(请参阅多处理文档:)

我尝试了多种解决方案,从:pytgquabr.com:8182/58288945/使用runpy的多处理到基于文件的mutext,只允许main的内容运行一次,但多处理仍然表现出奇怪的行为(例如,进程几乎一开始就死掉,没有错误日志)


知道“正确”的方法是什么吗?

仅当在另一个进程中使用了
\uuuuu main\uuu
中定义的对象时,才需要保护
\uuuuu main\u
模块。查找此定义是导致在子流程中执行
\uuuuuu main\uuuu
的原因

当使用
\uuuu main\uuuuuuuuuuuuuuuuupy
时,将与
多处理
一起使用的所有定义限制为其他模块<代码>\uuuu main\uuuuu.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

为什么您有一个名为
\uuu main\uuuuuuuu.py
?为了将库作为一个模块运行(即通过pip安装时使用
python-m my\u lib\u name
),即使您的文件名为
my\u lib\u name.py
,并且您使用
python-m my\u lib\u name
运行它,脚本中的
\uuu name\uuuuuu
变量将设置为
\uuuu main\uuuuu
注意,我说的是库(虽然如果我说的是包,可能更有意义),也就是说,我希望通过pip安装的人以这种方式运行它。我相信,你的方法不适合这个。请参阅关于该主题的官方python文档:您尝试过吗?你能提供一个可验证的例子吗?