13

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

jobs = {}
job = Job()
jobs[job.name] = job

现在我想将它转换为使用管理器字典,因为我想使用多处理并且需要共享这个字典 amonst 进程

mgr = multiprocessing.Manager()
jobs = mgr.dict()
job = Job()
jobs[job.name] = job

只是通过转换为使用 manager.dict() 事情变得非常缓慢。

例如,如果使用本机 dict,则只需 0.65 秒即可创建 625 个对象并将其存储到 dict 中。

同样的任务现在需要 126 秒!

我可以做任何优化以使 manager.dict() 与 python {} 保持一致?

4

2 回答 2

9

问题是由于某种原因,每次插入都很慢(在我的机器上慢了 117 倍),但如果你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变量。

另一种选择是使用广泛采用的multiprocessing.Queue类。

于 2016-02-12T02:51:07.967 回答
4

如果您mgr.dict()在池中的循环内使用。您可以使用本地普通字典临时存储结果,然后mgr.dict()在循环之外更新您的your_mgr_dict.update(local_dict)

于 2017-02-03T14:37:20.527 回答