我有一个字典正在由一个线程更新,而在另一个线程中,我想重复其值。通常我会使用一个锁,但是这个代码对性能非常重要,如果可能的话我想避免这种情况。一个人可以迭代正在被另一个线程修改的字典而不会引发异常吗?
我的情况的一个特点是我不关心迭代器的绝对正确性;如果它错过了迭代开始后删除的条目,或者选择了之后添加的条目,那很好。我只要求它不会引发任何'在迭代过程中更改的字典大小'异常。
鉴于这种放宽正确性的限制,有没有一种有效的方法来迭代字典而不使用锁?
注意:我知道keys()
在Python 2.x中是线程安全的,但是由于3.x中的行为已经发生变化,我想避免它。
如果你“只管去做”会发生什么? –
谈到并发性,我宁愿按照事实工作而不是随机实验。 – DNS
考虑到全局解释器锁的影响,锁定你的字典锁可能并不像你想象的那么昂贵(因为你的两个线程不会同时运行)。 – NPE