内存中的python多处理共享文件
我正在用python实现一个多处理程序,对于每个子进程,它们都需要读取文件的一部分 由于从磁盘读取文件的成本很高,所以我只想读取一次并将其放入共享内存中 1。如果我使用mmap,它可以与fork一起工作,但我找不到在多处理模块中的进程之间共享mmap文件的方法。 2。如果我将文件读入一个str,并将字符串存储在sharedTypes.RawArray('c',str)中,如果str中有一个\0,则可能会发生错误,生成的RawArray是文件的截断部分。内存中的python多处理共享文件,python,multiprocessing,shared-memory,mmap,Python,Multiprocessing,Shared Memory,Mmap,我正在用python实现一个多处理程序,对于每个子进程,它们都需要读取文件的一部分 由于从磁盘读取文件的成本很高,所以我只想读取一次并将其放入共享内存中 1。如果我使用mmap,它可以与fork一起工作,但我找不到在多处理模块中的进程之间共享mmap文件的方法。 2。如果我将文件读入一个str,并将字符串存储在sharedTypes.RawArray('c',str)中,如果str中有一个\0,则可能会发生错误,生成的RawArray是文件的截断部分。 有什么想法吗?您能使用多处理管理器吗?使m
有什么想法吗?您能使用多处理管理器吗?使mmped文件成为
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))
(我的答案基本上是从中复制的)如果文件是处于
'r+'
模式的数组,则可以使用numpy.memmap
打开该文件,每个进程在数组的不同区域上工作