Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: asynchronous, event loop, executor

Что будет, если смешать асинхронный код с CPU-bound задачей?

Этот вопрос проверяет понимание последствий выполнения CPU-bound задач в асинхронном коде.

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

Если смешать асинхронный код с CPU-bound задачей, это заблокирует event loop, потому что CPU-bound задача не отпускает управление и не дает event loop переключаться между задачами. Это приведет к снижению производительности и отзывчивости асинхронного приложения

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

Асинхронное программирование designed для IO-bound задач, которые часто ждут. CPU-bound задачи, наоборот, continuously use CPU.

Проблема:

  • Event loop работает в одном потоке. Если внутри асинхронной задачи выполняется CPU-bound код, он будет занимать CPU и не давать event loop переключаться на другие задачи.

  • Это блокирует весь event loop до завершения CPU-bound задачи.

  • Асинхронные преимущества теряются, и приложение становится неотзывчивым.

Решение:

  • Выносите CPU-bound задачи в отдельные потоки или процессы.

  • Используйте loop.run_in_executor чтобы запустить CPU-bound код в фоне.

Пример:

import asyncio
import time

async def cpu_bound_task():
    # Имитация CPU-bound задачи
    time.sleep(2)  # Это заблокирует event loop!
    return "Done"

async def main():
    result = await cpu_bound_task()
    print(result)

asyncio.run(main())

В этом примере time.sleep блокирует event loop. Вместо этого следует использовать asyncio.sleep для асинхронного ожидания или выносить задачу в executor.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Python

    Python

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

#asynchronous

#event loop

#executor

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