与常规字典相比,Python manager.dict()非常慢

时间:2016-02-12 02:42:50

标签: python python-2.7 multiprocessing python-multiprocessing multiprocessing-manager

我有一个存储对象的字典:

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 {}保持一致吗?

2 个答案:

答案 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)