繁体   English   中英

Python ints 线程安全吗?

[英]Are Python ints thread-safe?

Python ints 线程安全吗? 我无法从谷歌找到明确的答案。

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

如果不清楚,不可变的东西会自动成为线程安全的,因为两个线程无法同时尝试修改相同的东西。 你看,它们不能被修改,因为它们是不可变的。

来自解释器的示例:

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

正如其他人所说,Python 对象大多是线程安全的。 尽管您需要使用锁来保护 object 在需要通过多次更改才能再次使用 go 的地方。

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

但这绝不意味着 Python 语法中的任何操作即使是 GIL 效果也是线程安全的。 例如: x+=1 根本不是线程安全的。

为了确保代码中的线程安全,您需要确定对 object 的操作是否是线程安全的。 object 本身不保证线程安全,GIL 也不保证。

参考: python 线程中的 += 是否安全?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM