Multiprocessing: Gemeinsame Nutzung eines großen schreibgeschützten Objekts zwischen Prozessen?

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

Geben untergeordnete Prozesse, die durch Multiprocessing erzeugt wurden, gemeinsam Objekte, die früher im Programm erstellt wurden?

Ich habe folgendes Setup:

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

Ich lade ein großes Objekt in den Speicher und erstelle dann einen Pool von Arbeitern, die dieses große Objekt verwenden müssen. Auf das große Objekt wird nur lesend zugegriffen, ich muss es nicht Übergeben Sie Änderungen davon zwischen Prozessen.

Meine Frage ist: Wird das große Objekt in den gemeinsam genutzten Speicher geladen, wie es wäre, wenn ich einen Prozess in Unix/C erzeugen würde, oder lädt jeder Prozess seine eigene Kopie davon das große Objekt?

Aktualisierung: zur weiteren Verdeutlichung – big_lookup_object ist ein gemeinsam genutztes Suchobjekt. Ich muss das nicht aufteilen und separat verarbeiten. Ich muss eine einzige Kopie davon behalten. Die Arbeit, die ich zum Aufteilen benötige, besteht darin, viele andere große Dateien zu lesen und die Elemente in diesen großen Dateien mit den zu vergleichen lookup object.

Weiteres Update: Datenbank ist eine gute Lösung, memcached könnte eine bessere Lösung sein und Datei auf Festplatte (Shelve oder dbm) könnte noch besser sein.In dieser Frage interessierte mich besonders ein in Speicherlösung. Für die endgültige Lösung werde ich Hadoop verwenden, aber ich wollte sehen, ob ich auch eine lokale In-Memory-Version haben kann.