![](/img/trans.png)
[英]python multiprocessing on windows, if __name__ == “__main__”
[英]Why does Python's multiprocessing module import __main__ when starting a new process on Windows?
我正在为初学者准备一个图书馆,并且正在使用Python中的多处理模块。 我遇到了这个问题: 导入并使用使用多处理的模块,而不会在Windows上引起无限循环
例如,假设我有一个模块mylibrary.py
:
# mylibrary.py
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print "Hello from the new process"
def foo():
p = MyProcess()
p.start()
还有一个调用该库的主程序:
# main.py
import mylibrary
mylibrary.foo()
如果我在Windows上运行main.py
,它将尝试将main.py导入新进程,这意味着将再次执行代码,这将导致进程生成的无限循环。 我可以这样修复它:
import mylibrary
if __name__ == "__main__":
mylibrary.foo()
但是,这对于初学者来说非常令人困惑,而且似乎没有必要。 正在创建的新进程mylibrary
,那么为什么不新工艺只需要导入mylibrary
? 有没有一种方法可以解决此问题而不必更改main.py
?
顺便说一下,我正在使用Python 2.7。
Windows没有fork
,因此没有办法像现有的那样进行新的处理。 因此,子进程必须再次运行您的代码,但是现在您需要一种区分父进程和子进程的方法,而__main__
是。
此处的文档中对此进行了介绍: http : //docs.python.org/2/library/multiprocessing.html#windows
我不知道另一种结构化代码的方式来避免前叉炸弹效应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.