Чем запускать параллельно 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`.