我正在python中实现一个多处理程序,对于每个子进程,它们都需要读取文件的一部分。
由于从磁盘读取文件很昂贵,我只想读一次并放入共享内存。
1。如果我使用mmap,它可以使用fork,但我找不到在多处理模块中的Processes之间共享mmaped文件的方法。
2。如果我将文件读入str,并将该字符串存储在sharedctypes.RawArray('c',str)中,如果str中有\ 0,则会发生错误,生成的RawArray是文件的截断
有什么想法吗?
答案 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复制的)