dev*_*yti 5 python windows multiprocessing python-multiprocessing
我正在尝试使用 multiprocessing.pool,它似乎工作正常,除了整个脚本一次又一次循环......
我的代码 -
from multiprocessing import Pool
print "at top!"
arr = [30, 30, 30, 30]
def fib(num):
if num == 0 or num == 1: return 1
else: return (fib(num - 1) + fib(num - 2))
def main():
print "start"
pool = Pool(processes=4)
result = [pool.apply_async(fib, args=(arr[i],)) for i in range(4)]
pool.close()
pool.join()
for res in result:
print res.get()
print "end"
if __name__ == '__main__':
main()
print "end of program ?"
Run Code Online (Sandbox Code Playgroud)
它返回的是这个——
at top!
start
at top!
end of program ?
at top!
end of program ?
at top!
end of program ?
at top!
end of program ?
1346269
1346269
1346269
1346269
end
end of program ?
Run Code Online (Sandbox Code Playgroud)
我不想要的是重复at top !
和end of program
。
我希望主程序在那一刻冻结,并在所有计算完成后继续。
附注。我在 Windows 10 64 位上运行它。Python 2.7 32 位。
提前致谢。
如果您正在运行 Windows,这是预期的,python windows 生成进程的方式:脚本被导入的次数与生成的进程一样多。因此,"at top"
如果您未缩进(在脚本顶层),则不能只有一张打印件。也是一样的print "end of program ?"
,当然。
(这不会在 Linux 上发生,这解释了用户说他们无法复制的评论)
这也是您必须main
通过if __name__ == '__main__'
测试来保护您的原因。因此,要获得预期的输出,您必须执行以下操作:
if __name__ == '__main__':
print("at top!")
main()
print("end of program")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
591 次 |
最近记录: |