Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: event loop, asyncio, coroutine, async/await, concurrency

Как работает событийный цикл в Python?

Вопрос проверяет понимание асинхронного выполнения кода в Python, в частности механизма событийного цикла, который позволяет обрабатывать несколько задач конкурентно без многопоточности.

Короткий ответ

Событийный цикл — это основа асинхронного программирования в Python. Он управляет выполнением корутин, переключаясь между ними при ожидании ввода-вывода. Когда корутина встречает await, она приостанавливается, и цикл берет следующую задачу. Это позволяет эффективно обрабатывать множество соединений или запросов без блокировки.

Длинный ответ

Что такое событийный цикл?

Событийный цикл (event loop) — это механизм, который бесконечно выполняет и планирует асинхронные задачи (корутины) в одном потоке. В Python он реализован в модуле asyncio. Основная идея: вместо того чтобы ждать завершения операции ввода-вывода (например, чтения файла или сетевого запроса), корутина приостанавливается, и цикл переключается на другую задачу. Когда операция завершается, цикл возобновляет корутину.

Как это работает?

Событийный цикл хранит очередь задач. Он берет задачу, выполняет её до первого оператора await, затем приостанавливает и переходит к следующей. Когда приходит уведомление о завершении ожидаемой операции (например, от сокета), задача снова помещается в очередь на выполнение. Это напоминает кооперативную многозадачность: корутины сами отдают управление.

Пример кода

import asyncio

async def fetch_data(url):
    print(f"Загрузка {url}")
    await asyncio.sleep(1)  # имитация задержки
    print(f"Загружено {url}")
    return f"Данные из {url}"

async def main():
    tasks = [
        fetch_data("site1.com"),
        fetch_data("site2.com"),
        fetch_data("site3.com")
    ]
    results = await asyncio.gather(*tasks)
    print(results)

asyncio.run(main())

В этом примере три корутины запускаются одновременно. Каждая приостанавливается на await asyncio.sleep(1), и цикл переключается между ними. В результате все три загрузки завершаются примерно за 1 секунду, а не за 3.

Где применяется?

Событийный цикл идеален для I/O-bound задач: веб-серверы (aiohttp, FastAPI), сетевые клиенты, чат-приложения, обработка большого количества соединений. Он не подходит для CPU-bound задач (вычисления), так как работает в одном потоке — для этого лучше использовать multiprocessing.

Вывод: Событийный цикл в Python — ключевой инструмент для создания высокопроизводительных асинхронных приложений, работающих с сетью или файлами. Он позволяет обрабатывать тысячи соединений в одном потоке, экономя ресурсы и упрощая код.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Python

    Python

  • Node.js

    Node.js

Ключевые слова

#event loop

#asyncio

#coroutine

#async/await

#concurrency

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.