Telethon SendMultiMediaRequest致Worker繁忙及多媒帖拆分问题求助
解决Telethon转发多媒体时的Worker繁忙与帖子拆分问题
1. 调高Telethon的Worker并发数
Telethon默认的worker数量可能扛不住大量媒体的SendMultiMediaRequest请求,你可以在初始化客户端时手动设置workers参数,提升并发处理能力:
from telethon import TelegramClient # 把worker数量从默认值调高,比如设为16,根据实际情况测试调整 client = TelegramClient('session_name', api_id, api_hash, workers=16)
注意别设得太大,不然容易触发Telegram的频率限制,建议从8-16这个区间开始试。
2. 主动控制媒体拆分逻辑,确保每帖带文本
既然默认转发会把帖子拆成无文本的次帖,不如自己写拆分逻辑,让每一批发送的媒体都带上原帖文本,同时降低单请求的负载:
async def forward_media_with_text(client, source_chat, target_chat, message): media = message.media # 处理无媒体的普通消息 if not media or (not hasattr(media, 'documents') and not hasattr(media, 'photos')): await client.forward_messages(target_chat, message) return # 统一提取媒体列表(兼容照片和文档类型) media_list = media.photos if hasattr(media, 'photos') else media.documents original_text = message.text or '' batch_size = 8 # 对应Telegram单条消息允许的最大媒体数 # 分批发送,每批都附带原文本 for idx in range(0, len(media_list), batch_size): current_batch = media_list[idx:idx+batch_size] await client.send_file(target_chat, current_batch, caption=original_text)
用这个方法替代默认转发,就能避免出现只有媒体没有文本的拆分帖,同时分散请求压力。
3. 添加请求延迟,降低worker负载
在每批媒体发送后加短暂延迟,避免连续请求把worker压爆:
import asyncio async def forward_with_delay(client, source_chat, target_chat, message): media = message.media if not media or (not hasattr(media, 'documents') and not hasattr(media, 'photos')): await client.forward_messages(target_chat, message) return media_list = media.photos if hasattr(media, 'photos') else media.documents original_text = message.text or '' batch_size = 8 for idx in range(0, len(media_list), batch_size): current_batch = media_list[idx:idx+batch_size] await client.send_file(target_chat, current_batch, caption=original_text) await asyncio.sleep(1) # 每批发送后延迟1秒,可根据实际情况调整时长
延迟能降低请求密度,减少worker繁忙的概率。
4. 用send_file替代send_multi_media
如果原代码用的是send_multi_media,可以换成send_file来批量发送媒体,它对多媒体的处理更稳定,也支持自动拆分(但你可以用上面的主动拆分逻辑来控制):
# 直接用send_file发送全部媒体,超过8个会自动拆分,但建议配合上面的分批逻辑保证每帖带文本 await client.send_file(target_chat, media_list, caption=original_text)
内容的提问来源于stack exchange,提问作者Vitaliy Vynnyk
相关产品推荐
相关产品推荐

