我正在使用多处理处理存储在字典中的大量数据.基本上我正在做的是加载一些签名,存储在字典中,从中构建一个共享的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)