Os processos filhos gerados por meio de multiprocessamento compartilham objetos criados anteriormente no programa?
Eu tenho a seguinte configuração:
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
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 um grande objeto na memória e, em seguida, criando um pool de trabalhadores que precisam fazer uso desse grande objeto. O objeto grande é acessado somente leitura, não preciso passar modificações dele entre os processos.
Minha pergunta é: o objeto grande está carregado na memória compartilhada, como seria se eu gerasse um processo em unix / c, ou cada processo carrega sua própria cópia do objeto grande?
Atualização: para esclarecer mais - big_lookup_object é um objeto de pesquisa compartilhado. Eu não preciso dividir isso e processá-lo separadamente. Preciso manter uma única cópia dele. O trabalho que preciso dividir é ler muitos outros arquivos grandes e comparar os itens nesses arquivos grandes com o objeto de pesquisa.
Atualização adicional: o banco de dados é uma boa solução, o memcached pode ser uma solução melhor e o arquivo em disco (arquivar ou dbm) pode ser ainda melhor. Nesta questão, eu estava particularmente interessado em uma solução em memória. Para a solução final, estarei usando o hadoop, mas gostaria de ver se também posso ter uma versão na memória local.
marshal.load
para pai e para cada filho (cada processo importa o módulo).