Python解包线程安全吗?
作者:互联网
在Python中是否像x,y = self.mytuple atomic这样的操作?
或者在分配期间可以通过另一个线程修改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元组,它是线程安全的.
一旦从mytuple访问项目触发自定义__getitem__,所有投注都将关闭.
标签:python,multithreading,atomicity,thread-safety,atomic 来源: https://codeday.me/bug/20190831/1777509.html