Являются ли потоки потокобезопасными в Python
Python
Middle
Без компании
Являются ли потоки потокобезопасными в Python
Ответы
В Python потоки не являются полностью потокобезопасными из-за Global Interpreter Lock (GIL). GIL позволяет выполняться только одному потоку за раз, даже на многоядерных процессорах. Однако это не означает, что потоки полностью безопасны — состояние гонки (race condition) всё равно возможно при работе с общими данными.
Пример проблемы:
```
import threading
counter = 0
def increment():
global counter
for _ in range(100000):
counter += 1
threads = [threading.Thread(target=increment) for _ in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Может быть меньше 500000
```
Для потокобезопасности используйте:
- Блокировки (`threading.Lock`)
- Потокобезопасные структуры из `queue`
- Мультипроцессинг (`multiprocessing`) для CPU-bound задач
- Асинхронность (`asyncio`) для I/O-bound задач