Python 3.x 如何处理python3在main.py中的多处理
我提出了一个问题,我不理解问题的真正原因(似乎与我在其中一个子流程中使用烧瓶有关) 请忽略此项(由于赏金原因无法删除) 本质上,当作为模块运行python库时,我必须启动一些进程和/或池 但是,由于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,
\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文档:您尝试过吗?你能提供一个可验证的例子吗?