Uso de memória de multiprocessamento Python

Escrevi um programa que pode ser resumido da seguinte forma:

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()

O código real (especialmentewriteOutput()) é muito mais complicado.writeOutput() usa apenas esses valores que toma como seus argumentos (o que significa que não faz referênciadata)

Basicamente, ele carrega um enorme conjunto de dados na memória e o processa. A gravação da saída é delegada a um subprocesso (ela grava em vários arquivos, e isso leva muito tempo). Assim, cada vez que um item de dados é processado, ele é enviado para o subprocesso por res_queue, que, por sua vez, grava o resultado em arquivos, conforme necessário.

O subprocesso não precisa acessar, ler ou modificar os dados carregados peloloadHugeData() de qualquer forma. O subprocesso só precisa usar o que o processo principal enviares_queue. E isso me leva ao meu problema e pergunta.

Parece-me que o subprocesso obtém a cópia do enorme conjunto de dados (ao verificar o uso da memória comtop). Isso é verdade? E se sim, então como posso evitar id (usando essencialmente a memória dupla)?

Eu estou usando o Python 2.6 e o ​​programa está rodando no linux.

questionAnswers(1)

yourAnswerToTheQuestion