我正在为初学者开发一个库,并使用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。
Windows没有
fork
,因此无法像现有进程那样创建新进程。所以子进程必须再次运行代码,但现在需要一种方法来区分父进程和子进程,就是这样。这在这里的文档中有介绍:http://docs.python.org/2/library/multiprocessing.html#windows
我不知道还有什么方法来构造代码以避免叉子炸弹效应。
相关问题 更多 >
编程相关推荐