如何取消引用multiprocessing.RawArray对象以释放内存?

时间:2019-05-01 16:45:12

标签: python memory reference multiprocessing dereference

在我的工作中,我正在创建许多multiprocessing.RawArray对象,并在我的流程中使用它们(即,用一些已加载图像的内容填充它们)。在某个时候,我不再需要那些RawArray对象。这是我的工作流管道,显示了如何创建RawArray对象:

import multiprocessing as mp
import numpy as np

readProcesses = []
sharedArr = []
for i, imagePath in enumerate(imagePaths):
    sharedArr.append(mp.RawArray('f', 3*64*64))
    readProcesses.append(Process(target=readFile, kwargs={'filePath': imagePath, 'sharedArr': sharedArr, 'sharedArrIndex': i}))
    readProcesses[-1].start()

for proc im readProcesses:
    proc.join()

def readFile(filePath, sharedArr, sharedArrIndex):
    numpyImg = readAnImageAsNumpyArray(filePath)
    processBuffer = np.reshape(np.frombuffer(sharedArr[sharedArrIndex], dtype=np.float32), 3*64*64)
    processBuffer[:] = numpyImg

但是我想知道取消引用它们并让Python进行垃圾回收以释放内存的最佳方法是什么?我是否应该简单地通过遍历共享内存对象(即RawArray)的for循环并将它们设置为None或如下所示?

for sharedMemObj in sharedArr:
    sharedMemObj = None

0 个答案:

没有答案