lem*_*ant 2 python multithreading thread-safety python-3.x
Python内联是否是线程安全的?我无法从谷歌那里找到明确的答案.
是的,它们是不可变的,就像字符串一样.代码x += 1实际上创建了一个全新的整数对象并将其分配给x.
如果不清楚,那些不可变的东西是自动线程安全的,因为两个线程无法同时尝试修改同一个东西.你看,它们无法修改,因为它们是不可改变的.
解释器的示例:
>>> x = 2**123
>>> x
10633823966279326983230456482242756608
>>> id(x)
139652080199552
>>> a = id(x)
>>> x+=1
>>> id(x)
139652085519488
>>> id(x) == a
False
Run Code Online (Sandbox Code Playgroud)
Python 中的 Int 是不可变的,这意味着它以后无法修改,任何值更改都是将一个新的不可变 Int 对象分配给原始对象的过程。
但这并不意味着Python语法中的任何操作都是线程安全的,即使是GIL效果也是如此。例如:x+=1 根本不是线程安全的。
为了确保代码中的线程安全,您需要确定对一个对象的操作是否是线程安全的。对象本身不保证线程安全,GIL 也不保证。
参考: Python中的+=线程安全吗?
| 归档时间: |
|
| 查看次数: |
4882 次 |
| 最近记录: |