Как разыменовать объект multiprocessing.RawArray для освобождения памяти? - PullRequest
0 голосов
/ 01 мая 2019

В своей работе я создаю множество 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
...