TGViewer
Разъяснивший Python Разъяснивший Python @python_pssss · 6.97K subscribers
Post #4802 251
Backpressure в async Python-сервисах: как bounded queues, лимиты конкуренции и таймауты останавливают cascading failure

Это не микрооптимизация, а механизм выживания backend-сервиса под нагрузкой. В production проблема часто появляется на медленном downstream: таски плодятся, память растет, клиенты ретраят, и падает уже цепочка сервисов.

Очередь не должна быть бесконечной

asyncio.Queue() без maxsize часто превращает память процесса в скрытый буфер аварии. Делайте очередь bounded и решайте, что делать при переполнении: ждать, вернуть 429/503 или отбросить низкоприоритетную работу.

Лимитируйте конкуренцию

Async не означает “можно запустить 100k запросов к API или базе”.

queue = asyncio.Queue(maxsize=1000)
limit = asyncio.Semaphore(50)

async def submit(item):
try:
queue.put_nowait(item)
except asyncio.QueueFull:
raise Overloaded()

async def worker():
while True:
item = await queue.get()
try:
async with limit:
await asyncio.wait_for(
  • 🤬 2
More from @python_pssss
  1. Sep 22, 2026Использование подчеркивания в REPL Вы можете получить результат последнего выражения в Pyt…
  2. Sep 21, 2026Настраиваемый логгер-декоратор Начнем с примера использования. Так мы не перегружаем внима…
  3. Sep 21, 2026Замена переменных на месте Этот аккуратный трюк поможет сэкономить несколько строк кода. Р…
  4. Sep 20, 2026List Comprehensions List comprehension может заменить неэстетичные циклы, используемые для…
  5. Sep 20, 2026Data classes Начиная с версии 3.7, Python поставляется с классами данных. У них есть неско…
  6. Sep 19, 2026Спортивное программирование: что это, зачем и какие задачи приходится решать Это не програ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →