Python多进程共享文件内存

4
我正在使用Python实现一个多进程程序,每个子进程都需要读取文件的一部分。由于从磁盘读取文件很耗费时间,我希望只读取一次并将其放入共享内存中。
1. 如果我使用mmap,它可以与fork一起使用,但我找不到在multiprocessing模块中共享mmap文件的方法。
2. 如果我将文件读入str,并将字符串存储在sharedctypes.RawArray('c',str)中,如果str中有\ 0,则可能会出现错误,生成的RawArray是文件的截断。
你有什么想法吗?

如果这个文件是一个数组,并且每个进程都在数组的不同区域工作,那么您可以使用 numpy.memmap'r+' 模式打开该文件。 - Saullo G. P. Castro
1个回答

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))

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接