Почему max_workers не ограничивает очередь задач
ThreadPoolExecutor(max_workers=8) разрешает одновременно выполнять восемь вызовов. Если сразу вызвать submit для миллиона записей, остальные будут ждать, удерживая Future, аргументы и связанные объекты в памяти.
Окно незавершённой работы ограничивает и подачу: отправить, например, 32 задачи, дождаться завершений через wait(..., FIRST_COMPLETED), забрать результаты и только затем добавить новые. Производитель перестаёт бесконечно убегать вперёд.
В Python 3.14 для обработки с сохранением входного порядка есть executor.map(..., buffersize=32). Ручная схема удобнее, когда результаты нужны по готовности. Ни одна из этих границ не задаёт число запросов в секунду: для внешнего API ограничение частоты рассчитывают отдельно.
#python #производительность
Post #5046
445
