python多处理共享文件在内存中

时间:2013-08-17 13:11:15

标签: python multiprocessing shared-memory mmap

我正在python中实现一个多处理程序,对于每个子进程,它们都需要读取文件的一部分。

由于从磁盘读取文件很昂贵,我只想读一次并放入共享内存。

1。如果我使用mmap,它可以使用fork,但我找不到在多处理模块中的Processes之间共享mmaped文件的方法。

2。如果我将文件读入str,并将该字符串存储在sharedctypes.RawArray('c',str)中,如果str中有\ 0,则会发生错误,生成的RawArray是文件的截断

有什么想法吗?

1 个答案:

答案 0 :(得分: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复制的)