Какие знаешь подходы конкурентного выполнения кода в Python, помимо асинхронности
Python
Senior
VK
Какие знаешь подходы конкурентного выполнения кода в Python, помимо асинхронности
Ответы
В Python есть несколько подходов для конкурентного выполнения:
- **Потоки (threading)**
Подходит для I/O-bound задач (сетевые запросы, чтение файлов).
```
import threading
def task():
print("Выполняется в потоке")
thread = threading.Thread(target=task)
thread.start()
```
- **Процессы (multiprocessing)**
Для CPU-bound задач (тяжелые вычисления).
```
from multiprocessing import Process
def task():
print("Выполняется в процессе")
p = Process(target=task)
p.start()
```
- **Пулы потоков/процессов**
Использует `ThreadPoolExecutor` или `ProcessPoolExecutor` из `concurrent.futures`:
```
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor() as executor:
executor.map(lambda x: x**2, [1, 2, 3])
```
- **GIL (Global Interpreter Lock)**
Ограничивает потоки в Python (только один поток выполняет байткод). Процессы обходят GIL, так как у каждого свой интерпретатор.
*Выбор зависит от задачи: I/O-bound → threading/async, CPU-bound → multiprocessing.*