Что в Python мешает параллельному выполнению задач в потоках
Python
Senior
Без компании
Что в Python мешает параллельному выполнению задач в потоках
Ответы
В Python существует **Global Interpreter Lock (GIL)** – механизм, который позволяет выполнять только одному потоку за раз байт-код Python, даже на многоядерных процессорах. Это связано с тем, что управление памятью в CPython не является потокобезопасным.
GIL не мешает параллельному выполнению **I/O-bound задач** (например, сетевые запросы), но сильно ограничивает **CPU-bound операции** (вычисления).
**Пример:**
```
import threading
def count():
n = 0
for _ in range(10_000_000):
n += 1
# Запуск в потоках (из-за GIL не ускорится)
t1 = threading.Thread(target=count)
t2 = threading.Thread(target=count)
t1.start(); t2.start()
t1.join(); t2.join() # Выполнится медленнее, чем в одном потоке!
```
**Обходные пути:**
- Использование **multiprocessing** (отдельные процессы)
- Вынос CPU-задач в C-расширения (например, через **Cython**)
- Асинхронное программирование (**asyncio** для I/O-bound задач)