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

Python manager.dict() is very slow compared to regular dict

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

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

现在我想将它转换为使用 manager dict,因为我想使用 multiprocessing 并且需要在 monst processes 中共享这个 dict

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

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

例如使用原生dict,创建625个对象并存入dict只用了0.65秒

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

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

问题是由于某种原因每次插入都非常慢(在我的机器上慢了 117 倍),但是如果你用普通的 dict 更新你的 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 class.

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