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

如何解决Python中Telegram Bot测试的asyncio TimeoutError问题?

解决Telegram Bot长任务测试超时问题

问题分析

你在测试Telegram Bot的长运行任务(需超10分钟)时,已将相关超时参数设为600秒,但仍在15秒左右收到asyncio.exceptions.TimeoutError,核心原因是tgintegration的BotController或collect方法存在未覆盖的默认超时设置,或者参数配置未生效。

解决方案

1. 显式给collect方法传递超时参数

collect方法可能未继承controller的全局设置,需在调用时直接指定超时参数:

async with controller.collect(count=7, max_wait=600, wait_consecutive=600) as response:
    await controller.send_command("compute")

2. 设置Pyrogram客户端级超时

Pyrogram的Client默认超时较短,初始化时需显式配置:

def create_client(session_name: str = SESSION_NAME) -> Client:
    return Client(
        name=session_name,
        api_id=os.getenv("API_ID"),
        api_hash=os.getenv("API_HASH"),
        timeout=600  # 客户端全局超时设为600秒
    )

3. 移除冗余的双重超时包裹

如果已通过controller参数设置足够长的超时,无需额外用async_timeout.timeout包裹,避免冲突:

# 移除此行:async with timeout(600):
async with controller.collect(count=7, max_wait=600, wait_consecutive=600) as response:
    await controller.send_command("compute")

4. 验证消息数量匹配性

如果Bot实际发送的消息数少于count=7,collect会持续等待直到超时。可先降低count测试,或添加日志跟踪:

async with controller.collect(count=7, max_wait=600, wait_consecutive=600) as response:
    await controller.send_command("compute")
    print(f"已收到消息数:{len(response.messages)}")

5. 调整消息轮询间隔

适当调大wait_interval减少轮询频率,同时保证不会遗漏消息:

controller.wait_interval = 10  # 每10秒检查一次新消息

内容的提问来源于stack exchange,提问作者Geiser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:04