4

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

由于从磁盘读取文件很昂贵,我只想读取一次并放入共享内存。

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

2.如果我将文件读入str,并将字符串存储在sharedctypes.RawArray('c', str)中,如果str中有\0,则生成的RawArray是截断的文件。

任何想法?

4

1 回答 1

0

你可以使用多处理管理器吗?使 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))

(我的回答基本上是从这里复制过来的)

于 2017-08-11T12:49:09.680 回答