如何在多线程应用程序中使用GIL作为字典?

2024-09-30 01:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个线程中迭代一个字典时遇到了一个错误“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只能用于螺纹?或者有没有一种方法可以锁定字典,从而限制一次使用两个线程的对象?在


Tags: 对象keyinsizedictionary字典错误线程
1条回答
网友
1楼 · 发布于 2024-09-30 01:27:23

使用GIL来保护Python代码是不安全的-很难知道何时会丢失GIL。GIL是用来保护解释器的,而不是你的代码。在

您需要序列化字典的用法,最简单的方法是使用锁对象。在

from threading import Lock
dLock = Lock()

螺纹1:

^{pr2}$

螺纹2中:

dLock.acquire()
for key in dictDemo.keys():   
     #if key in dictDemo:   <  not required!
     dictDemo.pop(key,None)
dLock.release()

顺便说一句,dictDemo.clear()在这里可能很有用,如果您只想清除字典。在

相关问题 更多 >

    热门问题