Nik*_*s R 2 python multithreading dictionary critical-section
使用当前线程的线程ID只读取或写入时,Python字典线程是否安全?喜欢
import thread
import threading
class Thread(threading.Thread):
def __init__(self, data):
super(Thread, self).__init__()
self.data = data
def run(self):
data = self.data[thread.get_ident()]
# ...
Run Code Online (Sandbox Code Playgroud)
如果 data是标准的Python字典,则__getitem__调用完全在C中实现,__hash__对于返回的整数值的方法也是如此thread.get_ident().此时data.__getitem__(<thread identifier>)调用是线程安全的.这同样适用于写作data; 该data.__setitem__()呼叫完全在C中处理.
在Python代码中实现任何这些钩子的时刻,GIL可以在字节码之间释放,所有赌注都关闭.
这一切都假设您正在使用CPython; Jython,IronPython,PyPy和其他python实现可能会在何时切换线程时做出不同的决定.
你会用更好的threading.local()映射对象,而不是,因为这是保证为您提供一个线程本地命名空间.它只支持属性访问.