ChatCrawlerпоиск по публичному Telegram Открыть приложение
P

Python Community | Chat

сообщение · 2026-01-06 18:09 UTC
I
Ссылка
нажмите — покажем
‍⚡️ Приём на 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
900 ·

Все сообщения за 6 января 2026 · Вся лента · оригинал в Telegram

Открыть в Telegram Каталог площадок Искать в ChatCrawler

Слепок открытой публичной ленты из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог