eal*_*eon 9 python multiprocessing python-2.7 python-multiprocessing multiprocessing-manager
我有一个存储对象的字典:
jobs = {}
job = Job()
jobs[job.name] = job
Run Code Online (Sandbox Code Playgroud)
现在我想将它转换为使用管理器dict,因为我想使用多处理并需要共享这个dict amonst进程
mgr = multiprocessing.Manager()
jobs = mgr.dict()
job = Job()
jobs[job.name] = job
Run Code Online (Sandbox Code Playgroud)
只是通过转换为使用manager.dict(),事情变得非常缓慢.
例如,如果使用原生字典,则只需0.65秒即可创建625个对象并将其存储到dict中.
同样的任务现在需要126秒!
我可以做的任何优化使manager.dict()与python {}保持一致?
问题是由于某种原因,每个插入都很慢(在我的机器上慢了117倍),但是如果manager.dict()用普通的dict 更新你的,那么它将是一个单一的快速操作.
jobs = {}
job = Job()
jobs[job.name] = job
# insert other jobs in the normal dictionary
mgr = multiprocessing.Manager()
mgr_jobs = mgr.dict()
mgr_jobs.update(jobs)
Run Code Online (Sandbox Code Playgroud)
然后使用mgr_jobs变量.
另一种选择是使用广泛采用的multiprocessing.Queue类.
小智 5
mgr.dict()如果您在池中的循环内使用。您可以使用本地普通字典临时存储结果,然后mgr.dict()在循环外更新您的结果,例如your_mgr_dict.update(local_dict)
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |