Zen of Python
Ссылка
нажмите — покажем
нажмите — покажем
Сотни тысяч корутин лучше не запускать разом
Если запустить всю пачку асинхронных операций сразу, вы нагрузите вызываемые сервисы, а всё необходимое для работы окажется в памяти одновременно. Ограничение конкурентности нужно до того, как очередь съест ресурсы.
Питоничная цель напоминает imap_unordered(): одновременно выполнять не больше limit операций и отдавать результаты по мере готовности. asyncio.Semaphore кажется очевидным ответом из Stack Overflow, но автор предупреждает: лучший вариант другой.
В разборе ограничения конкурентности сопоставлены gather(), Semaphore, as_completed(), Queue и wait(). Читайте, чтобы понять, почему автор выбрал wait() и как собрал асинхронный map_unordered() с поддержкой итерируемых объектов и исключений.
12 · 1.4K ·