使用 Python 的 multiprocessing 时Pool.map(),我没有找回我的记忆。超过1GB的内存仍然被占用,虽然Pool退出了带有 的函数,但一切都关闭了,我什至尝试删除 的变量Pool并显式调用垃圾收集器。
当,在下面显示的代码中,取消注释pool.map()(并注释该pool.map()行)上方的两行时,一切看起来都不错,但是一旦使用multiprocessing内存,似乎在离开函数后不会再次被释放。
因为在现实世界的代码multiprocessing中调用了其他几个使用的函数,这甚至会堆积起来,消耗所有内存。
(不幸的是,我无法为次要的第二种情况生成一个最小的例子,堆积内存,但是一旦主要问题解决了,第二个也应该消失。)
这是 Linux 上的 Python 3.7.3,非常欢迎任何至少解释甚至解决此问题的帮助。
最小示例代码:
import gc
from time import sleep
from memory_profiler import profile
import numpy as np
def waitat(where, t):
# print and wait, gives chance to see live memory usage in some task manager program
print(where)
sleep(t)
@profile
def parallel_convert_all_to_hsv(imgs: np.ndarray) -> np.ndarray:
from skimage.color import rgb2hsv
import multiprocessing as …Run Code Online (Sandbox Code Playgroud)