Являются ли Python InT поточно-ориентированным? - PullRequest
2 голосов
/ 12 июня 2011

Являются ли Python-потоки поточно-ориентированными? Я не могу найти окончательный ответ на этот вопрос от Google.

Ответы [ 3 ]

8 голосов
/ 12 июня 2011

Да, они неизменны, как струны. Код x += 1 фактически создает новый целочисленный объект и присваивает его x.

В случае, если неясно, что неизменяемые вещи автоматически поточнобезопасны, поскольку у двух потоков нет возможности попытаться изменить одно и то же одновременно. Видите ли, их нельзя изменить, потому что они неизменны.

Пример от переводчика:

>>> x = 2**123
>>> x
10633823966279326983230456482242756608
>>> id(x)
139652080199552
>>> a = id(x)
>>> x+=1
>>> id(x)
139652085519488
>>> id(x) == a
False
3 голосов
/ 12 июня 2011

Как и другие, Python-объекты в большинстве своем ориентированы на многопоточность. Хотя вам нужно будет использовать блокировки, чтобы защитить объект в месте, требующем, чтобы он прошел через несколько изменений, прежде чем его снова можно будет использовать.

2 голосов
/ 08 мая 2014

Int в Python является неизменным, что означает, что его нельзя изменить позже, и любое изменение значения - это процесс присвоения нового неизменного объекта Int исходному.

Но это никогда не означает, что любая операция в синтаксисе Python является поточно-ориентированной, даже с эффектами GIL. Например: x + = 1 вообще не является потокобезопасным.

Чтобы обеспечить потокобезопасность в вашем коде, вам необходимо выяснить, является ли операция над одним объектом поточно-ориентированной. Сам объект не гарантирует потокобезопасность, как и GIL.

Ссылка: + + в потоке Python безопасен?

...