Pathos.multiprocessing的Pool似乎是非本地的?

时间:2018-04-17 22:36:19

标签: python multiprocessing pathos

我的代码确实

from pathos.multiprocessing import ProcessingPool
def myFunc(something):
    thispool = ProcessingPool(nodes=Result.cores)
    listOfResults = thispool.map(something)
    return listOfResults

for i in range(1000):
    myFunc(i)

现在,在我实际涉及的代码中,内存使用量不断增长。代码应该不采取任何措施,但如果我使用12个内核运行它,这12个内核最初将占用近1mb内存,但在几个小时的运行时间内,每个内核将需要几GB。

所以,我认为池会泄漏内存,我最好在每次迭代后关闭它:

def myFunc(something):
    thispool = ProcessingPool(nodes=Result.cores)
    listOfResults = thispool.map(something)
    thispool.close()
    thispool.join()
    return listOfResults

然而,现在,经过几次迭代,我得到了

ValueError: Pool not running

this pool.map()行。如果我创建一个新的

test = ProcessingPool(nodes=4)

并尝试运行test.map(),我得到同样的错误。这很奇怪,我已经初始化了一个新变量... pathos.processing.ProcessingPool是否具有唯一进程池的功能,如果我关闭一个,我关闭所有

在循环内部实现pathos.multiprocessing.ProcessingPool的正确方法是什么,没有内存泄漏?

当我改为使用multiprocessing.Pool时,问题不会出现。

1 个答案:

答案 0 :(得分:5)

事实证明,通过一些后端魔法,pathos可以防止相同类型的池的多个实例被初始化。

为了防止泄漏,可以在每次迭代结束时进行

thispool.terminate()
thispool.restart()