From f4774f92536fa45361e41d95ffe193abe5b3a022 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Wed, 30 Apr 2025 14:47:28 +0400 Subject: [PATCH] add semaphore for limiting concurrent Telegram API requests in get_chat_history --- rss_generator.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rss_generator.py b/rss_generator.py index acfd395..1d0b6b0 100644 --- a/rss_generator.py +++ b/rss_generator.py @@ -14,6 +14,7 @@ import re import time import os import hashlib +import asyncio from pathlib import Path from datetime import datetime, timezone from types import SimpleNamespace @@ -29,6 +30,9 @@ Config = get_settings() logger = logging.getLogger(__name__) +# Семафор для ограничения параллельных запросов к Telegram API при получении постов +POSTS_REQUEST_SEMAPHORE = asyncio.Semaphore(3) + async def _create_time_based_media_groups(messages: list[Message], merge_seconds: int = 5) -> list[Message]: """ Create media groups based on time difference between messages @@ -379,8 +383,9 @@ async def generate_channel_rss(channel: str | int, messages_start_time = time.time() messages = [] try: - async for message in post_parser.client.get_chat_history(channel, limit=limit*2): - messages.append(message) + async with POSTS_REQUEST_SEMAPHORE: + async for message in post_parser.client.get_chat_history(channel, limit=limit*2): + messages.append(message) except Exception as e: logger.error(f"Error during get_chat_history for channel '{channel}' (type: {type(channel)}): {str(e)}", exc_info=True) # Log error specifically for get_chat_history raise ValueError(f"Failed to get chat history for {channel}: {str(e)}") from e # Raise a more specific error