2013-08-17 125 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复制)