Ответ
Модуль asyncio
в Python предназначен для эффективного решения I/O-bound (задачи, ограниченные вводом-выводом) проблем с помощью кооперативной многозадачности и цикла событий (event loop).
Он идеально подходит для сценариев, где программа тратит большую часть времени на ожидание внешних ресурсов, таких как:
- Сетевые операции: HTTP-запросы, работа с веб-сокетами, взаимодействие с базами данных.
- Работа с файловой системой: асинхронное чтение и запись файлов.
- Обработка множества одновременных подключений: создание высокопроизводительных веб-серверов, чат-ботов, парсеров.
Ключевое преимущество: asyncio
позволяет управлять тысячами одновременных операций в одном потоке, избегая накладных расходов на создание и переключение системных потоков.
Пример: асинхронные HTTP-запросы
import asyncio
import aiohttp
async def fetch_url(session, url):
async with session.get(url) as response:
print(f"Статус для {url}: {response.status}")
return await response.text()
async def main():
urls = [
'http://python.org',
'http://github.com',
'https://fastapi.tiangolo.com/'
]
async with aiohttp.ClientSession() as session:
# Запускаем все задачи конкурентно и ждем их завершения
tasks = [fetch_url(session, url) for url in urls]
await asyncio.gather(*tasks)
# Запуск асинхронной программы
if __name__ == "__main__":
asyncio.run(main())
Когда не стоит использовать asyncio?
Для CPU-bound задач (вычисления, обработка данных), которые нагружают процессор, asyncio
не даст прироста производительности. В таких случаях следует использовать модуль multiprocessing
.