multiprocessing : partage d’un gros objet en lecture seule entre processus ?

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

Les processus enfants créés via le multitraitement partagent-ils des objets créés précédemment dans le programme ?

J'ai la configuration suivante :

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

Je charge un gros objet en mémoire, puis je crée un pool de travailleurs qui doivent utiliser ce gros objet. Le gros objet est accessible en lecture seule, je n'ai pas besoin de passer ses modifications entre les processus.

Ma question est : est-ce que le gros objet est chargé dans la mémoire partagée, comme ce serait le cas si j'engendrais un processus dans unix/c, ou est-ce que chaque processus charge sa propre copie de le gros objet ?

Mise à jour : pour clarifier davantage - big_lookup_object est un objet de recherche partagé. Je n"ai pas besoin de le diviser et de le traiter séparément. Je dois en conserver une seule copie. Le travail dont j"ai besoin pour le diviser consiste à lire de nombreux autres fichiers volumineux et à rechercher les éléments de ces fichiers volumineux par rapport au objet de recherche.

Mise à jour supplémentaire : la base de données est une bonne solution, memcached pourrait être une meilleure solution, et le fichier sur disque (étagère ou dbm) pourrait être encore mieux. Dans cette question, j'étais particulièrement intéressé par un in solution de mémoire. Pour la solution finale, j'utiliserai hadoop, mais je voulais voir si je pouvais également avoir une version locale en mémoire.