👁 В автоматизации часто нужно дергать десятки или сотни внешних API. Если делать это без ограничений, то легко словить rate limit, баны или просто убить сеть. Последовательный запуск слишком медленный, а бесконтрольный параллелизм — путь к проблемам. Нужно ограничивать количество одновременных задач.
📝 Ограничение параллелизма при работе с API
import asyncio
import aiohttp
sem = asyncio.Semaphore(5)
async def fetch(session, url):
async with sem:
async with session.get(url) as resp:
return await resp.text()
async def main():
urls = ["https://example.com"] * 20
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
print(len(results))
asyncio.run(main())📌 Как это работает:
Semaphoreограничивает количество одновременно выполняемых корутин (в примере — максимум 5).- Все запросы запускаются параллельно, но выполняются партиями, без перегрузки API.
- Такой подход позволяет держать баланс между скоростью и стабильностью автоматизации.
❗️ В задачах автоматизации и парсинга контроль параллелизма — критичен. Без него даже простой скрипт может быстро превратиться в источник блокировок и нестабильной работы.
tags: #python #автоматизация #разработка



