Использование многопроцессорной памяти Python
Я написал программу, которая может быть кратко изложена следующим образом:
def loadHugeData():
#load it
return data
def processHugeData(data, res_queue):
for item in data:
#process it
res_queue.put(result)
res_queue.put("END")
def writeOutput(outFile, res_queue):
with open(outFile, 'w') as f
res=res_queue.get()
while res!='END':
f.write(res)
res=res_queue.get()
res_queue = multiprocessing.Queue()
if __name__ == '__main__':
data=loadHugeData()
p = multiprocessing.Process(target=writeOutput, args=(outFile, res_queue))
p.start()
processHugeData(data, res_queue)
p.join()
Настоящий код (особенноwriteOutput()
) намного сложнее.writeOutput()
использует только те значения, которые он принимает в качестве аргументов (то есть он не ссылается наdata
)
В основном он загружает в память огромный набор данных и обрабатывает его. Запись выходных данных делегируется подпроцессу (на самом деле он записывает в несколько файлов, и это занимает много времени). Таким образом, каждый раз, когда обрабатывается один элемент данных, он отправляется подпроцессу res_queue, который, в свою очередь, записывает результат в файлы по мере необходимости.
Подпроцесс не нуждается в доступе, чтении или изменении данных, загруженныхloadHugeData()
в любом случае. Подпроцесс должен использовать только то, что основной процесс отправляет черезres_queue
, И это приводит меня к моей проблеме и вопросу.
Мне кажется, что подпроцесс получает его на копии огромного набора данных (при проверке использования памяти сtop
). Это правда? И если так, то как я могу избежать идентификатора (используя двойную память по существу)?
Я использую Python 2.6 и программа работает на Linux.