gpt4 book ai didi

Python GIL 和全局变量

转载 作者:太空狗 更新时间:2023-10-30 02:06:39 28 4
gpt4 key购买 nike

在 python 中,我定义了一个全局变量,它被不同的线程读取/递增。由于 GIL,如果不使用任何类型的锁定机制,这是否会导致问题?

最佳答案

GIL 只要求解释器在另一个线程接管之前完全执行单个字节码指令。但是,没有理由假设递增操作是一条指令。例如:

>>> import dis
>>> dis.dis(compile("x=753","","exec"))
1 0 LOAD_CONST 0 (753)
3 STORE_NAME 0 (x)
6 LOAD_CONST 1 (None)
9 RETURN_VALUE
>>> dis.dis(compile("x+=1","","exec"))
1 0 LOAD_NAME 0 (x)
3 LOAD_CONST 0 (1)
6 INPLACE_ADD
7 STORE_NAME 0 (x)
10 LOAD_CONST 1 (None)
13 RETURN_VALUE

如您所见,即使是这些简单的操作也不仅仅是一条字节码指令。因此,每当在线程之间共享数据时,您必须使用单独的锁定机制(例如,threading.lock)以保持数据一致性。

关于Python GIL 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157208/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com