为什么在Windows启动新进程时,Python的multiprocessing模块会导入__main__?

2024-09-29 00:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为初学者开发一个库,并使用Python中的多处理模块。我遇到了这个问题:importing and using a module that uses multiprocessing without causing infinite loop on 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的情况下解决这个问题?

顺便说一下,我正在使用Python2.7。


Tags: 模块frompyimportfoo进程mainwindows
1条回答
网友
1楼 · 发布于 2024-09-29 00:21:34

Windows没有fork,因此无法像现有进程那样创建新进程。所以子进程必须再次运行代码,但现在需要一种方法来区分父进程和子进程,就是这样。

这在这里的文档中有介绍:http://docs.python.org/2/library/multiprocessing.html#windows

我不知道还有什么方法来构造代码以避免叉子炸弹效应。

相关问题 更多 >