python dict 的 len() 相对于 GIL 是原子的吗?

Is a python dict's len() atomic with respect to the GIL?

我问的是 CPython,python2.7。假设我有一个 dict,还有一些线程会不时通过调用 add():

来插入值
d = {}
dlock = threading.Lock()
def add(key, value):
    with dlock:
        d[key] = value

在不获取锁的情况下,仅依靠 GIL 从单独的线程获取 dict 的大小是否安全?

def count():
    return len(d)

假设我不关心获得精确的正确值,只关心在 count() 期间的某个时刻正确的任何值。

我不推荐它,但是是的,GIL 会保护它。在 len 调用期间没有机会释放 GIL。