Ηλί*_*ίας 36 python multiprocessing
我正在使用Doug Hellmann关于多处理的教程中的以下示例:
import multiprocessing
def worker():
"""worker function"""
print 'Worker'
return
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
当我试图在if语句之外运行它时:
import multiprocessing
def worker():
"""worker function"""
print 'Worker'
return
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
它开始不间断地产生进程,并且阻止它的唯一方法是重启!
为什么会这样?为什么它没有生成5个进程并退出?为什么我需要if语句?
Den*_*ach 46
在Windows上没有fork()例程,因此multiprocessing导入当前模块以访问该worker函数.如果没有if声明,子进程就会启动自己的子进程等等.
请注意,文档提到您需要ifWindows上的语句(此处).
但是,文档并未说明这会立即杀死您的计算机,需要重新启动.所以这可能会让人很困惑,尤其是如果multiprocessing在代码内部的某些函数中使用会发生这种情况.无论它有多深,你还需要if检查主程序文件.这几乎排除了multiprocessing在任何类型的库中使用.
multiprocessing总的来说看起来有点粗糙.它可能具有线程接口的接口,但是围绕GIL没有简单的方法.
对于更复杂的并行化问题,我还会看一下subprocess模块或其他一些库(如mpi4py或Parallel Python).