multiprocessamento: compartilhando um grande objeto somente leitura entre processos?

| | | | | | | | | | | | | | | | | | | | | | | | |

Os processos filhos gerados por meio de multiprocessamento compartilham objetos criados anteriormente no programa? p>

Tenho a seguinte configuração:

do_some_processing(filename): for line in file(filename): if line.split(",")[0] in big_lookup_object: # algo aqui if __name__ == "__main__": big_lookup_object = marshal.load("file.bin") pool = Pool(processes=4) print pool.map(do_some_processing, glob.glob("*.data")) 

Estou carregando algum objeto grande na memória e, em seguida, criando um pool de workers que precisam fazer uso desse objeto grande. O objeto grande é acessado somente leitura, não preciso passar modificações dele entre processos.

Minha pergunta é: o objeto grande é carregado na memória compartilhada, como seria se eu gerasse um processo em unix/c, ou cada processo carrega sua própria cópia de o grande objeto?

Atualização: para esclarecer melhor - big_lookup_object é um objeto de pesquisa compartilhado. Eu não preciso dividir isso e processá-lo separadamente. Eu preciso manter uma única cópia dele. O trabalho que eu preciso dividir é ler muitos outros arquivos grandes e procurar os itens nesses arquivos grandes no objeto de pesquisa.

Atualização adicional: banco de dados é uma boa solução, memcached pode ser uma solução melhor e arquivo em disco (shelve ou dbm) pode ser ainda melhor. solução de memória. Para a solução final, usarei o hadoop, mas queria ver se também posso ter uma versão local na memória.