按顺序执行ProcessingPools的正确方法

时间:2017-03-10 21:36:31

标签: python multiprocessing pool

我正在使用pathos.multiprocessing库(因为我的worker方法中有lambdas),并且我试图按顺序运行两个ProcessingPools。

例如:

from pathos.multiprocessing import ProcessingPool
pool=ProcessingPool(nodes=2)
res=pool.map(workerFunc,workerArgList)
pool.close()
pool.join()
# ...
pool=ProcessingPool(nodes=2)
res=pool.map(workerFunc2,workerArgList2)
pool.close()
pool.join()

代码按原样返回第2个pool.map()中的pool.py的map()函数中的AssertionError(在assert self._state == RUN处)。每个游泳池独立工作。看来,由于某种原因,池的状态在第二次初始化时设置为TERMINATE而不是RUN。我应该如何初始化第二个池(或终止第一个池)以获得所需的行为?或者这是我偶然发现的某种错误?

谢谢! 安德鲁

1 个答案:

答案 0 :(得分:1)

根据official Python Documentation on Pool.map()

  

它会阻塞,直到结果准备就绪。

换句话说,pool.map()在完成所有处理之前不会返回结果。使用pool.map()时,您不需要每次都运行pool.close()pool.join(),只需在使用pool后执行一次。