2013-08-17 55 views
4

我在python中實現了一個多處理程序,並且對於每個子進程,它們都需要讀取文件的一部分。在內存中的Python多處理共享文件

由於從磁盤讀取文件非常昂貴,我只想讀取一次並放入共享內存。

1.如果我使用mmap,它可以使用fork,但我找不到在多處理模塊中的進程之間共享mmaped文件的方法。

2.如果我文件到STR中讀取,並存儲在sharedctypes.RawArray串(「C」,STR),如果沒有在STR一個\ 0,就可能出現錯誤,則生成的RawArray是文件的截斷。

任何想法?

+0

您可以用'numpy.memmap'打開該文件,如果它是在模式'「R +」'的數組,每個進程工作陣列的不同區域 –

回答

0

您可以使用多處理管理器嗎?使mmped文件成爲由Namespace()函數返回的NameSpace對象的屬性,並將其引用傳遞給每個進程。

from multiprocessing import Manager 

mgr = Manager() 
ns = mgr.Namespace() 
ns.df = my_dataframe 

# now just give your processes access to ns, i.e. most simply 
# p = Process(target=worker, args=(ns, work_unit)) 

(我的回答基本上是從here複製)