我的代码确实如此
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()