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

Как asyncio поведет себя с CPU bound задачей

Asyncio предназначен для I/O-bound задач, где основное время тратится на ожидание (сеть, файлы и т.д.). Для CPU-bound задач он неэффективен, так как:

  1. Глобальная блокировка (GIL) мешает параллельному выполнению CPU-bound кода в одном процессе.
  2. Event loop работает в одном потоке, и долгие вычисления блокируют его, задерживая другие корутины.

Решение:

  • Используйте concurrent.futures.ProcessPoolExecutor для выноса CPU-bound задач в отдельные процессы:
python
import asyncio
from concurrent.futures import ProcessPoolExecutor

async def main():
    loop = asyncio.get_running_loop()
    with ProcessPoolExecutor() as pool:
        result = await loop.run_in_executor(pool, cpu_intensive_task, arg)

Или выбирайте multiprocessing или threading (если задача не сильно зависит от GIL).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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