多处理“池”挂起在运行的程序上

2024-03-29 05:53:23 发布

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

我已经编写了一个程序来使用多处理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%。在


Tags: 文件函数import程序maindefjupytermath
1条回答
网友
1楼 · 发布于 2024-03-29 05:53:23

问题是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正在获取iterable并在进程之间分配它,本质上它正在为您执行for循环。因此,您可以直接访问x。在

最后,使用with作为上下文管理器确保池在完成时关闭。[docs]

编辑:我编辑并测试了上述代码,我的代码发送正确的值并正确关闭。在

此代码在Spyder 3.2.6和标准终端中也适用。两个片段都结束得很好,不要挂在我的机器上。在

^{pr2}$

相关问题 更多 >