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

如何在AWS Lambda上使python-telegram-bot执行完job_queue后优雅停止

解决方案

在AWS Lambda环境下,你不需要启动机器人的更新轮询(run_polling),因为你的需求只是执行一次性任务后优雅退出。以下是修改后的代码,完全适配Lambda的短运行时特性:

import asyncio
from telegram.ext import ApplicationBuilder

# 替换为你的机器人Token
BOT_TOKEN = "YOUR_BOT_TOKEN"

async def check_promotion(context):
    # 这里写你的任务逻辑
    print("执行促销检查任务...")
    # 任务完成后无需额外操作,后续会自动停止事件循环

async def execute_jobs():
    # 初始化Application,仅用于创建JobQueue
    application = ApplicationBuilder().token(BOT_TOKEN).build()
    job_queue = application.job_queue

    # 添加10秒后执行的一次性任务
    job = job_queue.run_once(check_promotion, 10)

    # 启动Application的必要组件(仅初始化JobQueue,不启动更新轮询)
    await application.start()
    # 等待任务完成
    await job.done()
    # 优雅关闭Application和释放资源
    await application.stop()

def main(event, context):
    print("初始化任务执行环境...")
    # 运行异步任务流程
    asyncio.run(execute_jobs())
    print("任务执行完成,已优雅退出")

关键修改说明

  • 移除无用Handler:你不需要接收任何Telegram消息更新,所以删除了CommandHandler相关代码,减少资源占用。
  • 抛弃run_polling:该方法会持续轮询Telegram服务器获取更新,完全不符合Lambda短运行时的场景,改用直接控制异步任务生命周期。
  • 优雅的任务等待与停止:通过await job.done()等待任务执行完成,再调用application.stop()释放所有资源,避免强制终止带来的问题。
  • 适配Lambda同步Handler:用asyncio.run()将异步任务包装在同步的main函数中,符合Lambda的执行模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:43:33