asyncio — Асинхронный ввод/вывод

import asyncio

Основы async/await

import asyncio

async def say_hello():
    print("Привет")
    await asyncio.sleep(1)
    print("Мир")

asyncio.run(say_hello())

Параллельный запуск

import asyncio

async def fetch_data(name, delay):
    await asyncio.sleep(delay)
    return f"данные {name}"

async def main():
    results = await asyncio.gather(
        fetch_data("users", 2),
        fetch_data("posts", 1),
        fetch_data("comments", 3)
    )
    # Все три завершатся за ~3 секунды, не 6

asyncio.run(main())

Задачи и таймауты

import asyncio

async def main():
    task = asyncio.create_task(some_coroutine())
    
    try:
        result = await asyncio.wait_for(task, timeout=3.0)
    except asyncio.TimeoutError:
        print("Таймаут!")

Синхронизация

import asyncio

lock = asyncio.Lock()
semaphore = asyncio.Semaphore(3)

async def safe_operation():
    async with lock:
        await asyncio.sleep(1)

Частые ошибки

Официальная документация

asyncio — Asynchronous I/O

Полный справочник API (API Reference)

Важные функции

Функция Описание
asyncio.run(coro) Точка входа. Запускает главный цикл событий (event loop) и выполняет корутину coro.
asyncio.create_task(coro) Планирует корутину coro на выполнение в фоне, возвращает объект Task.
asyncio.sleep(delay) Асинхронная пауза на delay секунд (отдает управление обратно в event loop).
asyncio.gather(*aws) Конкурентно запускает несколько корутин и возвращает список результатов.
asyncio.wait_for(aw, timeout) Ждет выполнения корутины, бросает ошибку при превышении timeout.