multiprocesamiento: ¿compartir un objeto grande de solo lectura entre procesos?

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

¿Los procesos secundarios generados mediante multiprocesamiento comparten objetos creados anteriormente en el programa?

Tengo la siguiente configuración:

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

Estoy cargando un objeto grande en la memoria, luego creando un grupo de trabajadores que necesitan hacer uso de ese objeto grande. Se accede al objeto grande de solo lectura, no necesito pasar modificaciones de él entre procesos.

Mi pregunta es: ¿el objeto grande está cargado en la memoria compartida, como sería si generara un proceso en unix/c, o cada proceso carga su propia copia de el objeto grande?

Actualización: para aclarar más: big_lookup_object es un objeto de búsqueda compartido. No necesito dividirlo y procesarlo por separado. Necesito conservar una sola copia. El trabajo que necesito para dividirlo es leer muchos otros archivos grandes y buscar los elementos en esos archivos grandes en comparación con los objeto de búsqueda.

Actualización adicional: la base de datos es una buena solución, memcached podría ser una mejor solución y el archivo en el disco (shelve o dbm) podría ser aún mejor. En esta pregunta, estaba particularmente interesado en un solución de memoria. Para la solución final, usaré hadoop, pero quería ver si también puedo tener una versión local en memoria.