我正在玩一个为初学者学习的库,我正在使用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
我不知道另一种方法来构建代码,以避免叉炸弹的影响。