x,y = self.mytuple
像Python 中的原子操作一样吗?
或者可以self.mytuple
在分配期间被另一个线程修改,导致 x 引用 self.mytuple 的第一个版本,而 y 引用第二个版本?
我正在使用 Python 3。
x,y = self.mytuple
像Python 中的原子操作一样吗?
或者可以self.mytuple
在分配期间被另一个线程修改,导致 x 引用 self.mytuple 的第一个版本,而 y 引用第二个版本?
我正在使用 Python 3。
只有当项目访问不是由 Python 代码处理时,它才是线程安全的。
解包由一个字节码处理:
>>> def f():
... a, b = self.mytuple
...
>>> import dis
>>> dis.dis(f)
2 0 LOAD_GLOBAL 0 (self)
3 LOAD_ATTR 1 (mytuple)
6 UNPACK_SEQUENCE 2
9 STORE_FAST 0 (a)
12 STORE_FAST 1 (b)
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
提供self.mytuple
的是真正的标准 Python tuple
,即线程安全。
一旦从mytuple
触发 custom访问项目__getitem__
,所有赌注都将关闭。