python 多进程共享字典 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() 事情变得非常慢。

例如,如果使用原生字典,创建625个对象并存储到字典中只需要0.65秒。

同样的任务现在需要 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 类。

关于与常规字典相比,Python manager.dict() 非常慢,我们在Stack Overflow上找到一个类似的问题: Python manager.dict() is very slow compared to regular dict - Stack Overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值