繁体   English   中英

在Windows上启动新进程时,为什么Python的多处理模块会导入__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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM