我在 python 中实现了一个多处理程序,对于每个子进程,它们都需要读取文件的一部分。
由于从磁盘读取文件很昂贵,我只想读取一次并放入共享内存。
1.如果我使用mmap,它可以与fork一起使用,但是我找不到在多处理模块中的进程之间共享mmaped文件的方法。
2.如果我将文件读入str,并将字符串存储在sharedctypes.RawArray('c', str)中,如果str中有\0,则生成的RawArray是截断的文件。
任何想法?
我在 python 中实现了一个多处理程序,对于每个子进程,它们都需要读取文件的一部分。
由于从磁盘读取文件很昂贵,我只想读取一次并放入共享内存。
1.如果我使用mmap,它可以与fork一起使用,但是我找不到在多处理模块中的进程之间共享mmaped文件的方法。
2.如果我将文件读入str,并将字符串存储在sharedctypes.RawArray('c', str)中,如果str中有\0,则生成的RawArray是截断的文件。
任何想法?
你可以使用多处理管理器吗?使 mmped 文件成为Namespace()
函数返回的 NameSpace Object 的属性,并将 this 的引用传递给每个进程。
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))
(我的回答基本上是从这里复制过来的)