TGViewer
Python Community Python Community @python_community_ru · 11.6K subscribers
Post #2964 905
‍⚡️ Приём на Python под высокой нагрузкой: ограничивай конкуренцию сам, а не доверяй это ОС.

Вместо тысячи одновременных задач делай очередь + фиксированное число воркеров.

Так ты:

- не убиваешь БД/внешний сервис шторма́м запросов
- контролируешь задержки
- получаешь естественный backpressure

Пример для I/O-нагрузки (HTTP запросы) с asyncio:


import asyncio
import aiohttp
from time import perf_counter

URLS = [
"https://example.com"
for _ in range(10_000) # много запросов под нагрузкой
]

MAX_CONCURRENCY = 100 # ограничиваем параллелизм
QUEUE_SIZE = 1_000 # ограничиваем длину очереди (backpressure)


async def worker(name: int, queue: asyncio.Queue, session: aiohttp.ClientSession):
while True:
url = await queue.get()
if url is None: # сигнал завершения
queue.task_done()
break

try:
async with session.get(url, timeout=5) as resp:
await resp.text() # или resp.read()
# здесь твоя логика обработки
except Exception as e:
# логируй, но не падай
print(f"[worker {name}] error: {e}")

queue.task_done()


async def main():
queue = asyncio.Queue(maxsize=QUEUE_SIZE)

async with aiohttp.ClientSession() as session:
# поднимаем ограниченное число воркеров
workers = [
asyncio.create_task(worker(i, queue, session))
for i in range(MAX_CONCURRENCY)
]

# кидаем задачи в очередь
for url in URLS:
await queue.put(url)

# шлём сигнал завершения воркерам
for _ in workers:
await queue.put(None)

# ждём, пока всё отработает
await queue.join()

# аккуратно завершаем воркеров
for w in workers:
await w


if __name__ == "__main__":
t0 = perf_counter()
asyncio.run(main())
print(f"Done in {perf_counter() - t0:.2f}s")


Суть приёма:

Вместо «одна корутина на каждый запрос» ты держишь фиксированный пул воркеров.

Очередь с maxsize работает как предохранитель: если бэкенд/БД не успевают, продюсер начинает тормозиться.

Такой подход гораздо стабильнее под всплесками трафика, чем голый gather на десятки тысяч задач.

@Python_Community_ru
  • 👍 2
  • 🔥 1
More from @python_community_ru
  1. Oct 2, 2026webAI выпустила TwIL-LM3-Pro - компактную модель на 3,66B параметров специально для формал…
  2. Oct 1, 2026🔥 Бесплатный курс по Claude Code на русском: от установки до команды агентов На GitHub вы…
  3. Sep 30, 2026🖥 Cayu - open-source runtime для долгоживущих ИИ-агентов на Python Проект закрывает инфра…
  4. Sep 29, 2026🖥 Примеры кода на Python 2026: лучшие практики, разбор и задачи с решениями Python пример…
  5. Sep 28, 2026🚀 Jina-OCR-v1 разбирает целые страницы в Markdown со скоростью 2,57 страницы/с Jina AI пр…
  6. Sep 27, 2026🐍 В Python 3.15 решили мягко «похоронить» re.match() re.match() никуда не удаляют, но для…
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 →