В своей работе я создаю множество 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 собирать мусор для освобождения памяти?Должен ли я просто иметь цикл for, который проходит через объекты общей памяти (то есть RawArray
) и устанавливает для них значение Нет или что-то вроде следующего?
for sharedMemObj in sharedArr:
sharedMemObj = None