Были ли планы увеличить число одновременно обрабатываемых задач больше десяти?
Что проверяют
Это уточнение к вашему проекту: интервьюер хочет понять, знаете ли вы, откуда взялось ограничение в десять задач и что сломается, если его поднять. Следом обычно спрашивают, что было узким местом и как бы вы измерили эффект от изменения.
Как отвечать
Начните с причины лимита, а не с технологий. Десятка редко берётся с потолка:
- внешний API: лимит запросов в секунду у партнёра;
- база: пул соединений. У SQLAlchemy по умолчанию
pool_size=5иmax_overflow=10, аmax_connectionsв PostgreSQL по умолчанию 100 на всех клиентов сразу; - ресурсы воркера: ядра CPU и память на одну задачу.
Дальше разделите нагрузку по типу, от него зависит инструмент:
- I/O-bound:
asyncioсasyncio.Semaphore(n)для ограничения иasyncio.TaskGroup(Python 3.11+) для запуска, клиентыhttpxилиaiohttp. Тысячи ожидающих корутин тут нормальны; - блокирующий I/O:
ThreadPoolExecutor, по умолчанию он берётmin(32, число ядер + 4)потоков; - CPU-bound:
ProcessPoolExecutorили отдельные процессы. Потоки не помогут из-за GIL, а free-threaded сборка CPython пока отдельный вариант, а не поведение по умолчанию; - распределённая обработка: Celery с брокером RabbitMQ или Redis, параллелизм задаётся
--concurrencyи типом пула, горизонтально добавляются воркеры.
Закончите метриками: пропускная способность, время задачи, длина очереди до и после нагрузочного теста, например в Locust.
Если планов не было, скажите честно и объясните почему: «десяти хватало на текущий поток, узким местом был лимит API, поэтому поднимать параллелизм не имело смысла». Это зрелый ответ, в отличие от придуманного рассказа про рост в три раза.
Где спотыкаются
Предлагают просто поменять 10 на 100. Очередь при этом переезжает из приложения в базу или во внешний сервис, и начинаются таймауты и отказы по лимиту.
Берут потоки для CPU-задач в Python и удивляются, что быстрее не стало.
Не думают об обратном давлении и сбоях: при большем параллелизме нужны повторы с экспоненциальной задержкой, идемпотентность задач и контроль памяти воркера.