[英]Multiprocessing “Pool” hangs on running program
我编写了一个程序来使用多处理python包中的“Pool”,但是它一直挂着内核。(顺便说一下,我正在使用Jupyter和Anaconda)
我尝试使用像“math”这样的导入包中的函数,它运行得很好,但是,当我使用我在同一个python文件中创建的函数时,它不起作用。
import multiprocessing as mp
def f(x):
for i in x:
return i+1
ar=[1,2,3,4,5]
def main():
pool=mp.Pool(processes=4)
pool.map(f,ar)
if __name__== '__main__':
main()
它表明内核正在运行,但CPU使用率为0%。
问题是ar
不在你的主函数的局部范围内,它在它之上。 把它放在里面它应该工作。
from multiprocessing import Pool
def f(x):
return x+1
if __name__ == '__main__':
ar=[1,2,3,4,5]
with Pool(4) as p:
print(p.map(f, ar))
还要考虑map
正在进行迭代并在整个进程中分配它,本质上它正在为你做for
循环。 因此,您可以直接访问x。
最后,使用with
作为上下文管理器可确保您的池在完成后关闭。 [文档]
编辑:我编辑并测试了上面的代码,我发送正确的值并正确关闭。
此代码也适用于Spyder 3.2.6和标准终端。 两个片段都正常关闭,不会挂在我的机器上。
import multiprocessing as mp
def f(x):
return x+1
def main():
ar = [1,2,3,4,5]
pool = mp.Pool(processes=4)
print(pool.map(f, ar))
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.