Python int 是线程安全的吗?

发布于 2024-11-15 04:30:49 字数 41 浏览 2 评论 0原文

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

Are Python ints thread-safe? I cannot find a definitive answer for this from Google.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧时模样 2024-11-22 04:30:49

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

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

解释器的示例:

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

Yes, they are immutable, just like strings. The code x += 1 actually creates a brand new integer object and assigns it to x.

In case it's not clear, things that are immutable are automatically thread safe because there is no way for two threads to try to modify the same thing at the same time. They can't be modified you see, because they're immutable.

Example from the interpreter:

>>> x = 2**123
>>> x
10633823966279326983230456482242756608
>>> id(x)
139652080199552
>>> a = id(x)
>>> x+=1
>>> id(x)
139652085519488
>>> id(x) == a
False
念三年u 2024-11-22 04:30:49

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

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

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

参考:
Python 中的 += 线程安全吗?

Int in Python is immutable which means it cannot be modified later, and any value change is a process of assigning a new immutable Int object to the original one.

But it never means any operation in Python syntax is thread-safe even GIL effects.
For example: x+=1 is not thread-safe at all.

To ensure thread-safety in your code, you need to find if the operation on one object is thread-safe.
The object itself does not guarantee thread-safety, nor GIL does.

Reference:
is += in python thread safe?

窗影残 2024-11-22 04:30:49

正如其他人所说,Python 对象大多是线程安全的。尽管您需要使用锁来保护某个地方的对象,要求它在再次可用之前经历多次更改。

Like the other have said, Python objects are mostly thread-safe. Although you will need to use Locks in order to protect an object in a place that require it to go through multiple changes before being usable again.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文