← Назад к вопросам

Что такое асинхронность в Python?

2.0 Middle🔥 181 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Асинхронность в Python

Асинхронность — это парадигма программирования, которая позволяет выполнять долгие операции без блокирования основного потока выполнения. Это критично для Data Scientists при работе с большими объёмами данных и API.

Основные концепции

Синхронный код выполняется последовательно: каждая операция ждёт завершения предыдущей. Это приводит к неэффективности при работе с I/O (сетевые запросы, чтение файлов).

Асинхронный код позволяет переключаться между задачами, пока одна ждёт результата. Пока первый запрос обрабатывается, можно обработать второй и третий.

async/await синтаксис

import asyncio
import aiohttp

async def fetch_data(session, url):
    async with session.get(url) as response:
        return await response.json()

async def main():
    async with aiohttp.ClientSession() as session:
        urls = ['http://api1.com', 'http://api2.com', 'http://api3.com']
        tasks = [fetch_data(session, url) for url in urls]
        results = await asyncio.gather(*tasks)
        return results

asyncio.run(main())

Ключевые элементы

async def — определяет асинхронную функцию (корутину). Такая функция возвращает объект-корутину, который нужно await'ить.

await — ждёт завершения асинхронной операции и возвращает результат. Может использоваться только внутри async функции.

asyncio.gather() — запускает несколько корутин параллельно и ждёт их завершения.

asyncio.run() — точка входа для запуска асинхронного кода из синхронного контекста.

Практическое применение в DS

async def load_training_data():
    sources = ['database_api', 'storage_api', 'cache_api']
    
    async def get_from_source(source):
        async with aiohttp.ClientSession() as session:
            async with session.get(f'https://api.com/{source}') as resp:
                return await resp.json()
    
    results = await asyncio.gather(
        *[get_from_source(s) for s in sources]
    )
    return results

Event Loop

Внутри Python работает event loop — ядро асинхронной системы. Это цикл, который постоянно проверяет готовые корутины, выполняет их, и переходит к следующей, если текущая ждёт результата.

Отличие от многопоточности

Threading — истинный параллелизм (несколько потоков одновременно), но сложнее с синхронизацией.

async/await — кооперативная многозадачность в одном потоке, более безопасно.

На практике я использую асинхронность для параллельных API запросов, что критично в data pipeline'ах с множественными источниками данных.

Что такое асинхронность в Python? | PrepBro