You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:05:30