多處理:在進程之間共享一個大的只讀對象?

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

通過multiprocessing 生成的子進程是否共享程序之前創建的對象?

我有以下設置:

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

我正在將一些大對象加載到內存中,然後創建一個需要使用該大對象的工作人員池。大對像是只讀訪問的,我不需要在進程之間傳遞對它的修改。

我的問題是:是否將大對象加載到共享內存中,就像我在 unix/c 中生成一個進程一樣,或者每個進程是否加載自己的大對象?

更新:進一步澄清 - big_lookup_object 是一個共享查找對象。我不需要拆分它並單獨處理它。我需要保留它的一個副本。我需要拆分它的工作是讀取許多其他大文件並根據這些大文件查找這些大文件中的項目查找對象。

進一步更新:數據庫是一個很好的解決方案,memcached 可能是一個更好的解決方案,磁盤上的文件(擱置或 dbm)可能會更好。在這個問題中,我特別感興趣的是內存解決方案。對於最終解決方案,我將使用 hadoop,但我想看看我是否也可以擁有本地內存版本。