multiprocessing: een groot alleen-lezen object delen tussen processen?

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

Delen onderliggende processen die zijn voortgebracht via multiprocessing objecten die eerder in het programma zijn gemaakt?

Ik heb de volgende instellingen:

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

Ik laad een groot object in het geheugen en maak vervolgens een pool van werkers die gebruik moeten maken van dat grote object. Het grote object is alleen-lezen toegankelijk, dat hoef ik niet te doen wijzigingen ervan doorgeven tussen processen.

Mijn vraag is: wordt het grote object in het gedeelde geheugen geladen, zoals het zou zijn als ik een proces in unix/c zou hebben voortgebracht, of laadt elk proces zijn eigen kopie van het grote voorwerp?

Update: om verder te verduidelijken - big_lookup_object is een gedeeld opzoekobject. Ik hoef dat niet op te splitsen en apart te verwerken. Ik moet er een enkele kopie van bewaren. Het werk dat ik nodig heb om het te splitsen is het lezen van veel andere grote bestanden en het opzoeken van de items in die grote bestanden tegen de lookup object.

Verdere update: database is een prima oplossing, memcached is misschien een betere oplossing, en een bestand op schijf (shelf of dbm) is misschien nog beter. In deze vraag was ik vooral geïnteresseerd in een in geheugenoplossing. Voor de uiteindelijke oplossing gebruik ik hadoop, maar ik wilde zien of ik ook een lokale in-memory-versie kan hebben.