Telethon批量发送群消息卡顿延迟问题求助
问题诊断与优化方案
你的卡顿和发送缓慢问题,核心原因是触发了Telegram的消息发送速率限制,同时原代码的批量发送逻辑未做限流处理,导致服务器主动限制请求,进而出现长时间卡顿。以下是针对性的优化方案和修改后的代码:
关键优化点
- 添加分级延迟:在单条消息发送后、群组切换时分别设置延迟,降低请求频率,规避限流
- 处理限流异常:捕获Telethon专属的
FloodWaitError,按要求等待后自动重试,避免卡顿中断 - 优化群组遍历逻辑:先批量收集所有目标群组,再逐个发送,减少遍历与发送的资源冲突
修改后的代码
from telethon import TelegramClient from telethon.errors import FloodWaitError import asyncio api_id = xxxxxx api_hash = 'hash54356' client = TelegramClient('new_session', api_id, api_hash, system_version="4.16.30-vxITSNOTBOT") async def send_message(target, messages): try: if not str(target).startswith("-100"): print(f"{target} 不是有效群组,跳过...") return for message in messages: try: await client.send_message(target, message) # 单条消息发送后延迟3秒,避免短时间内发多条触发限流 await asyncio.sleep(3) except FloodWaitError as e: print(f"触发Telegram限流,等待{e.seconds}秒后重试") await asyncio.sleep(e.seconds) await client.send_message(target, message) await asyncio.sleep(3) print(f"已向{target}发送{len(messages)}条消息") except Exception as e: print(f"向群组{target}发送消息时出错: {e}") async def main(): # 先收集所有需要发送的群组ID,避免遍历过程中阻塞发送流程 target_groups = [] async for dialog in client.iter_dialogs(): if dialog.is_group: target_groups.append(dialog.id) # 逐个向群组发送消息,群组间额外延迟5秒 for target in target_groups: messages = ["https://t.me/channel1", "https://t.me/channel2"] await send_message(target, messages) await asyncio.sleep(5) with client: client.loop.run_until_complete(main())
额外建议
- 若你加入的群组数量较多,可进一步降低发送频率(比如把消息间延迟调到5秒,群组间延迟调到10秒)
- 定期清理session文件,或改用
StringSession减少本地IO开销 - 避免在短时间内向几百个群组批量发送消息,分批次处理更稳妥
内容的提问来源于stack exchange,提问作者Spidy
相关产品推荐
相关产品推荐

