小编Dav*_*e C的帖子

python:使用多处理共享巨大的词典

我正在使用多处理处理存储在字典中的大量数据.基本上我正在做的是加载一些签名,存储在字典中,从中构建一个共享的dict对象(获取Manager.dict()返回的'proxy'对象)并将此代理作为参数传递给具有该函数的函数在多处理中执行.

只是为了澄清:

signatures = dict()
load_signatures(signatures)
[...]
manager = Manager()
signaturesProxy = manager.dict(signatures)
[...]
result = pool.map ( myfunction , [ signaturesProxy ]*NUM_CORES )
Run Code Online (Sandbox Code Playgroud)

现在,如果签名少于200万个条目,那么一切都很完美.无论如何,我必须使用5.8M密钥处理字典(二进制格式的酸洗签名生成4.8 GB文件).在这种情况下,进程在创建代理对象期间死亡:

Traceback (most recent call last):
  File "matrix.py", line 617, in <module>
signaturesProxy = manager.dict(signatures)
  File "/usr/lib/python2.6/multiprocessing/managers.py", line 634, in temp
token, exp = self._create(typeid, *args, **kwds)
  File "/usr/lib/python2.6/multiprocessing/managers.py", line 534, in _create
id, exposed = dispatch(conn, None, 'create', (typeid,)+args, kwds)
  File "/usr/lib/python2.6/multiprocessing/managers.py", line 79, in dispatch
raise convert_to_error(kind, result)
multiprocessing.managers.RemoteError: …
Run Code Online (Sandbox Code Playgroud)

python dictionary shared-objects multiprocessing

7
推荐指数
2
解决办法
4618
查看次数