循环中使用pathos多进程出现“Pool not running”错误的问询
循环中使用pathos Pool报错
ValueError: Pool not running的原因分析 问题场景
我尝试在循环中执行并行计算,编写代码如下:
from pathos.multiprocessing import ProcessingPool as Pool def add(x,y): return x+y for i in range(10): pool = Pool(4) x = [0,1,2,3] y = [4,5,6,7] pool.map(add, x, y) pool.close() pool.join()
运行后返回错误:
ValueError: Pool not running
我找到的可行方法是在每次循环中添加pool.restart():
for i in range(10): pool = Pool(4) pool.restart() x = [0,1,2,3] y = [4,5,6,7] pool.map(add, x, y) pool.close() pool.join()
原本预期每次迭代重新创建Pool实例即可正常运行,想知道问题出在哪里?
问题原因
pathos的ProcessingPool和标准库multiprocessing.Pool的初始化逻辑存在差异:
- 标准库
Pool实例化后会立即启动工作进程,可直接调用map等并行方法 - 而pathos的
ProcessingPool默认不会在实例化时自动启动进程池,必须手动调用restart()方法来完成进程池的初始化与启动
你第一次创建pool = Pool(4)时,进程池处于未启动的状态,直接调用pool.map自然会触发Pool not running的错误。添加pool.restart()后,进程池才被真正启动,因此能正常执行并行任务。
另外,更高效的写法是将进程池的创建移到循环外部,避免重复创建和销毁进程带来的性能开销:
from pathos.multiprocessing import ProcessingPool as Pool def add(x,y): return x+y pool = Pool(4) for i in range(10): x = [0,1,2,3] y = [4,5,6,7] pool.map(add, x, y) pool.close() pool.join()
这种写法既不需要每次调用restart(),还能提升运行效率。
内容的提问来源于stack exchange,提问作者David Liu
相关产品推荐
相关产品推荐

