我有一个存储对象的字典:
jobs = {}
job = Job()
jobs[job.name] = job
现在我想将它转换为使用管理器dict,因为我想使用多处理并且需要共享这个dict amonst进程
mgr = multiprocessing.Manager()
jobs = mgr.dict()
job = Job()
jobs[job.name] = job
只是通过转换为使用manager.dict(),事情变得非常缓慢。
例如,如果使用原生字典,则只需0.65秒即可创建625个对象并将其存储到字典中。
同样的任务现在需要126秒!
我可以做的任何优化使manager.dict()与python {}保持一致吗?
答案 0 :(得分:6)
问题是由于某种原因,每个插入都很慢(在我的机器上慢了117倍),但是如果用正常的dict更新([ \t]*-?[0-9]+[ \t]*/[ \t]*-?[0-9]+[ \t]*)|(\S)
,那么它将是一个快速的操作。
manager.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)
变量。
另一个选择是使用广泛采用的mgr_jobs
类。
答案 1 :(得分:0)
如果您在池中的循环中使用mgr.dict()
。您可以使用本地普通字典临时存储结果,然后像mgr.dict()
your_mgr_dict.update(local_dict)