Чем запускать параллельно I/O bound задачи в Python
Python
Senior
VK
Чем запускать параллельно I/O bound задачи в Python
Ответы
Для параллельного выполнения I/O-bound задач в Python лучше всего использовать `asyncio` или многопоточность (`threading`), так как GIL не блокирует потоки во время операций ввода-вывода.
**1. `asyncio`** (предпочтительно для современных приложений):
```
import asyncio
async def fetch_data(url):
# имитация I/O операции
await asyncio.sleep(1)
return f"Данные с {url}"
async def main():
tasks = [fetch_data(f"url_{i}") for i in range(3)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
```
**2. `threading`** (проще, но менее эффективно при большом числе задач):
```
from threading import Thread
import time
def fetch_data(url):
time.sleep(1)
print(f"Данные с {url}")
threads = [Thread(target=fetch_data, args=(f"url_{i}",)) for i in range(3)]
for t in threads: t.start()
for t in threads: t.join()
```
**Выбор:**
- `asyncio` — для асинхронного кода (HTTP-запросы, базы данных с async поддержкой).
- `threading` — если используются синхронные библиотеки (например, `requests`).
Для CPU-bound задач вместо этого используй `multiprocessing`.