Встречается на собеседованиях • сегодня

Как цикл событий узнает что корутина закончила работу в asyncio

В asyncio цикл событий отслеживает завершение корутин через механизм Future. Когда корутина вызывается, она возвращает объект Future, который привязан к Task.

Когда корутина завершает выполнение (либо успешно, либо с исключением), она устанавливает результат или исключение в связанный Future. Цикл событий проверяет состояние Future и, когда оно меняется на "готово", обрабатывает завершение.

Пример:

python
async def my_coro():
    await asyncio.sleep(1)
    return "Done"

async def main():
    task = asyncio.create_task(my_coro())
    await task  # Здесь Future отмечается как завершенный
    print(task.done())  # True

Ключевые моменты:

  1. Корутина привязывается к Task, который содержит Future
  2. При завершении корутина устанавливает результат в Future
  3. Цикл событий проверяет состояние Future через коллбэки
  4. Когда Future завершен, цикл уведомляет ожидающие задачи
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы