Python内联是否是线程安全的?

时间:2011-06-12 04:22:59

标签: python multithreading thread-safety python-3.x

Python内联是否是线程安全的?我无法从谷歌那里找到明确的答案。

3 个答案:

答案 0 :(得分:8)

是的,它们是不可变的,就像字符串一样。代码x += 1实际上创建了一个全新的整数对象,并将其分配给x

如果不清楚,那些不可变的东西是自动线程安全的,因为两个线程无法同时尝试修改同一个东西。

,它们无法修改,因为它们是不可变的。

解释器的例子:

>>> x = 2**123
>>> x
10633823966279326983230456482242756608
>>> id(x)
139652080199552
>>> a = id(x)
>>> x+=1
>>> id(x)
139652085519488
>>> id(x) == a
False

答案 1 :(得分:3)

就像其他人所说的那样,Python对象大多是线程安全的。虽然您需要使用锁定来保护需要它的对象在再次使用之前经过多次更改。

答案 2 :(得分:2)

Python中的Int是不可变的,这意味着它不能在以后修改,任何值更改都是将新的不可变Int对象分配给原始对象的过程。

但它绝不意味着Python语法中的任何操作都是线程安全的,甚至是GIL效果。 例如:x + = 1根本不是线程安全的。

要确保代码中的线程安全,您需要查找对一个对象的操作是否是线程安全的。 对象本身不保证线程安全,也不保证GIL。

参考: is += in python thread safe?