3

x,y = self.mytuple像Python 中的原子操作一样吗?

或者可以self.mytuple在分配期间被另一个线程修改,导致 x 引用 self.mytuple 的第一个版本,而 y 引用第二个版本?

我正在使用 Python 3。

4

1 回答 1

5

只有当项目访问不是由 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__,所有赌注都将关闭。

于 2013-07-26T12:13:57.907 回答