Синхронизация 20 тысяч товаров через gather уронила API поставщика
async def sync_all(product_ids):
await asyncio.gather(*(sync_product(pid) for pid in product_ids))
Список — 20 тысяч товаров. Через секунду после старта API поставщика начал отвечать 429 Too Many Requests, а у сервиса закончились файловые дескрипторы. Как исправить, сохранив параллельность?
- Ограничить число одновременных запросов через asyncio.Semaphore
- Заменить gather на цикл с await — запросы пойдут по одному
- Перенести запросы в ThreadPoolExecutor на 20 тысяч потоков
- Добавить asyncio.sleep(0) в начало sync_product
