Pyrogram发送视频时进度回调触发Flood异常无法处理如何解决
问题根本原因
你触发Flood异常的核心原因是进度回调的调用频率过高:大文件上传时send_video的进度回调每秒会触发数十次,你当前的实现每次回调都会调用edit_message_text编辑消息,远超过Telegram API对消息编辑的频率限制(单聊每分钟最多允许编辑30次左右,群聊限制更严格)。即使添加了通用try-except,如果没有针对性处理FloodWait异常的等待逻辑,持续高频请求仍然会反复触发限制,甚至导致账号临时功能受限。
可行解决思路
- 增加编辑节流逻辑:设置最小编辑间隔(推荐1~2秒),只有距离上次编辑消息的时间超过间隔阈值才发起新的编辑请求,大幅降低API请求频率
- 增加进度变化校验:只有当前进度和上一次展示的进度差值超过0.5%~1%时才编辑消息,避免相同/接近的内容重复发起请求
- 针对性处理Flood异常:捕获Pyrogram内置的
FloodWait异常后,主动等待异常返回的要求等待时长,再重试操作,不要直接忽略异常继续发起请求 - 优化终态处理逻辑:不要在进度回调中处理100%进度的消息编辑,等
send_video方法执行完成后再统一编辑最终状态,减少冗余请求
修改后代码示例
首先导入依赖并定义全局进度状态存储,用于实现节流逻辑:
import asyncio from pyrogram.errors import FloodWait # 按消息ID存储每个上传任务的进度状态,支持多任务并行上传 upload_task_status = {}
修改后的进度回调函数:
async def send_media_progress(current, total, *args): client, chat_id, message_id = args[0], args[1], args[2] current_percent = round(current * 100 / total, 1) # 初始化当前上传任务的状态 if message_id not in upload_task_status: upload_task_status[message_id] = { "last_edit_ts": 0, "last_shown_percent": 0 } task_status = upload_task_status[message_id] # 节流判断:间隔不足1秒/进度变化小于0.5% 直接跳过编辑 if (asyncio.get_event_loop().time() - task_status["last_edit_ts"] < 1) \ or abs(current_percent - task_status["last_shown_percent"]) < 0.5: return # 100%进度直接移除状态,后续由上传完成后的逻辑统一处理 if current_percent >= 100: upload_task_status.pop(message_id, None) return try: await client.edit_message_text( chat_id=chat_id, message_id=message_id, text=f"upload: {current_percent}%" ) # 更新状态记录 task_status["last_edit_ts"] = asyncio.get_event_loop().time() task_status["last_shown_percent"] = current_percent except FloodWait as e: # 按API要求等待对应时长后再继续 await asyncio.sleep(e.value) except Exception: # 其他编辑错误直接忽略,不阻断主上传流程 pass
发送视频的代码调整,上传完成后统一编辑终态:
await app.send_video( chat_id=message.chat.id, video=file_location, progress=send_media_progress, progress_args=[client, message.chat.id, loader_message.message_id] ) # 上传执行完成后统一编辑最终状态 await client.edit_message_text( chat_id=message.chat.id, message_id=loader_message.message_id, text="sending..." )
内容的提问来源于stack exchange,提问作者Mohsn
相关产品推荐
相关产品推荐

