我的密码是

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时,不会出现问题。

最佳答案

事实上,通过一些后端魔术,pathos可以防止初始化同一类型池的多个实例。
为了防止泄漏,可以在每次迭代结束时执行

thispool.terminate()
thispool.restart()

10-06 01:38