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

我正在玩一个为初学者学习的库,我正在使用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中创build,那么为什么新的进程只是导入mylibrary呢? 有没有办法解决这个问题,而不必改变main.py

顺便说一句,我正在使用Python 2.7。

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

这包括在这里的文档: http : //docs.python.org/2/library/multiprocessing.html#windows

我不知道另一种方法来构建代码,以避免叉炸弹的影响。