3

我的代码可以

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

4

1 回答 1

5

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

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

thispool.terminate()
thispool.restart()
于 2018-04-18T14:06:15.927 回答