Насколько подходит многопоточность (multithreading) в Python для параллельных задач
Python
Middle
Без компании
Насколько подходит многопоточность (multithreading) в Python для параллельных задач
Ответы
В Python многопоточность (`threading`) подходит **только для I/O-bound задач** (сетевые запросы, чтение/запись файлов), где потоки могут работать параллельно во время ожидания.
**Проблема GIL (Global Interpreter Lock)** ограничивает выполнение Python-кода одним потоком в один момент времени, поэтому для **CPU-bound задач** (математические вычисления) лучше использовать `multiprocessing` или `asyncio` для I/O.
Пример для I/O-bound:
```
import threading
import requests
def fetch_url(url):
response = requests.get(url)
print(f"Fetched {url}, status: {response.status_code}")
urls = ["https://example.com", "https://google.com"]
threads = [threading.Thread(target=fetch_url, args=(url,)) for url in urls]
for t in threads:
t.start()
for t in threads:
t.join()
```
**Итог:**
✔ Подходит для I/O-bound (ожидание операций).
❌ Не подходит для CPU-bound (из-за GIL).
🔹 Альтернативы: `multiprocessing` (CPU), `asyncio` (I/O).