您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中对线程使用全局字典

在Python中对线程使用全局字典

假设cpython:是和否。从多个并发读/写请求不会破坏字典的意义上来说,从共享字典中获取/存储值实际上是安全的。这是由于实现保留了全局解释器锁(“ GIL”)。那是:

线程A正在运行:

a = global_dict["foo"]

线程B正在运行:

global_dict["bar"] = "hello"

线程C正在运行:

global_dict["baz"] = "world"

即使所有三个访问尝试均在“相同”时间进行,也不会破坏字典。解释器将以某种未定义的方式序列化它们。

但是,以下序列的结果是不确定的:

线程A:

if "foo" not in global_dict:
   global_dict["foo"] = 1

线程B:

global_dict["foo"] = 2

因为线程A中的测试/设置不是原子的(“检查时间/使用时间”竞争条件)。因此,通常最好将其锁定

from threading import RLock

lock = RLock()

def thread_A():
    with lock:
        if "foo" not in global_dict:
            global_dict["foo"] = 1

def thread_B():
    with lock:
        global_dict["foo"] = 2
python 2022/1/1 18:27:58 有180人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶