python中的dis模块可以查看一句python代码的cpu运行轨迹,也就是cpu指令,
如果只是读取数据时,如读取一个函数,此时数据是安全的,因为没有涉及任何修改,
当改数据时,可能会涉及数据不安全,如多个线程同时修改一个数据,原因是一句代码对应了多条cpu指令,如有4条指令,当执行完第二条时,cpu时间片轮转了,此时数据可能发生错误。
所以任何 += -= *- 都是数据不安全的
- 没有存进去,只有load读数据,安全
import dis
def func2():
a = 0
a + 1
dis.dis(func2)
运行结果
3 0 LOAD_CONST 1 (0)
2 STORE_FAST 0 (a)
4 4 LOAD_FAST 0 (a)
6 LOAD_CONST 2 (1)
8 BINARY_ADD
10 POP_TOP
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
- 数据存进去,数据不安全
import dis
def func2():
a = 0
a += 1
dis.dis(func2)
运行结果
3 0 LOAD_CONST 1 (0)
2 STORE_FAST 0 (a)
4 4 LOAD_CONST 2 (1)
6 STORE_FAST 0 (a)
8 LOAD_CONST 0 (None)
10 RETURN_VALUE
以上涉及cpu多步指令