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



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

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

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

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

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

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

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

我可以做任何优化来使 manager.dict() 与 python {} 相提并论?

问题是由于某种原因,每个插入都非常慢(在我的机器上慢了 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类。

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

最新更新