Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存中的python多处理共享文件_Python_Multiprocessing_Shared Memory_Mmap - Fatal编程技术网

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

内存中的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

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

由于从磁盘读取文件的成本很高,所以我只想读取一次并将其放入共享内存中

1。如果我使用mmap,它可以与fork一起工作,但我找不到在多处理模块中的进程之间共享mmap文件的方法。

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


有什么想法吗?

您能使用多处理管理器吗?使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
打开该文件,每个进程在数组的不同区域上工作