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

在Python中对线程使用全局字典,第1张

在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 RLocklock = RLock()def thread_A():    with lock:        if "foo" not in global_dict: global_dict["foo"] = 1def thread_B():    with lock:        global_dict["foo"] = 2


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5644197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存