Python多处理在scrip上迭代

2021-05-13 14:07:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试我的手多处理.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 ?"

它的回报是-

^{pr2}$

我不想重复at top !和{}。在

我希望主程序在那一点冻结,只有在所有的计算完成后才能继续。在

我在Windows10上运行,64位。Python2.7 32位。在

提前谢谢。在

1条回答
网友
1楼 ·

如果您运行的是windows,pythonwindows生成进程的方式是这样的:脚本的导入次数与派生进程的次数相同。因此,如果将undented(在脚本顶层),则不能只有一个"at top"打印。当然,print "end of program ?"也是如此。在

(这在Linux上不会发生,这解释了用户说他们不能复制的评论)

你为什么要用cd3来保护你。因此,要获得预期的输出,您必须:

if __name__ == '__main__':
    print "at top!"
    main()
    print "end of program"

相关问题