multiprocessing: condivisione di un grande oggetto di sola lettura tra processi?

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

I processi figlio generati tramite multiprocessing condividono oggetti creati in precedenza nel programma?

Ho la seguente configurazione:

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

Sto caricando un oggetto grande in memoria, quindi sto creando un pool di lavoratori che devono utilizzare quell'oggetto grande. L'oggetto grande è accessibile in sola lettura, non è necessario passare le modifiche tra i processi.

La mia domanda è: il grande oggetto è caricato nella memoria condivisa, come sarebbe se generassi un processo in unix/c, o ogni processo carica la propria copia di il grande oggetto?

Aggiornamento: per chiarire ulteriormente - big_lookup_object è un oggetto di ricerca condiviso. Non ho bisogno di dividerlo ed elaborarlo separatamente. Devo conservarne una singola copia. Il lavoro di cui ho bisogno per dividerlo è leggere molti altri file di grandi dimensioni e cercare gli elementi in quei file di grandi dimensioni rispetto al oggetto di ricerca.

Ulteriore aggiornamento: il database è un'ottima soluzione, memcached potrebbe essere una soluzione migliore e il file su disco (shelve o dbm) potrebbe essere ancora migliore. In questa domanda ero particolarmente interessato a un soluzione di memoria. Per la soluzione finale userò hadoop, ma volevo vedere se posso avere anche una versione in memoria locale.