我在一个线程中迭代一个字典时遇到了一个错误“RuntimeError:dictionary changed size during iteration”,它被插入到Python 2.7的另一个线程中,我发现通过使用全局Intrepreter锁,我们可以在多线程情况下锁定一个对象。在
In thread1:
dictDemo[callid]=val
in thread2:
for key in dictDemo:
if key in dictDemo:
dictDemo.pop(key,None)
我在thread2中遇到错误“RuntimeError:dictionary changed size during iteration”,因为thread1同时工作。**我如何使用GIL在thread2中锁定dictDemo字典?**或者GIL只能用于螺纹?或者有没有一种方法可以锁定字典,从而限制一次使用两个线程的对象?在
使用GIL来保护Python代码是不安全的-很难知道何时会丢失GIL。GIL是用来保护解释器的,而不是你的代码。在
您需要序列化字典的用法,最简单的方法是使用锁对象。在
螺纹1:
^{pr2}$螺纹2中:
顺便说一句,
dictDemo.clear()
在这里可能很有用,如果您只想清除字典。在相关问题 更多 >
编程相关推荐