如何在 Telegram bot 中重启后恢复 Python 中的调度程序任务?

问题描述 投票:0回答:1

我正在编写电报机器人,在某些地方,例如,用户购买了订阅,一个月后调度程序必须将其关闭,但重新启动后,RAM 中的所有数据都将被删除,并且此任务将无法完成。我使用 AsyncIOScheduler。重新启动代码后,我需要继续所有计划的任务。我尝试过,启动调度程序,在重新启动开始 Scheduler.start() 中添加的代码以继续来自数据库的调度程序任务后,但这不起作用。

from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.asyncio import AsyncIOScheduler

def f():
    print("Hello, World!")

jobstore = {
"default": SQLAlchemyJobStore(url="sqlite:///scheduler.db")
}

scheduler = AsyncIOScheduler(jobstores=jobstore)

@router.message(CommandStart())
async def start_handler(message: Message):
    scheduler.add_job(f, "date", id="job_1", jobstore="default", run_date=(datetime.datetime.now() + datetime.timedelta(seconds=30)))
    scheduler.start()

我可以做什么来解决这个问题?

python sqlalchemy telegram apscheduler aiogram
1个回答
0
投票

例如,设置自动关闭订阅可能很有用,但有时需要重新启动代码。我已经找到决定了。

from apscheduler.jobstores.sqlalchemy      import SQLAlchemyJobStore
from apscheduler.schedulers.asyncio import AsyncIOScheduler

def f():
    print("Hello, World!")

scheduler = AsyncIOScheduler(jobstores=jobstore)
scheduler.add_jobstore(“sqlalchemy”, url=“sqlite:///scheduler.db”)
scheduler.start()
@router.message(CommandStart())
async def start_handler(message: Message):
    scheduler.add_job(f, "date", id="job_1", run_date=(datetime.now() + timedelta(seconds=30)), misfire_grace_time=3600)

初始化Scheduler对象时,添加scheduler.start()来自动启动计划的功能。还要添加misfire_grace_time参数,例如,您的函数必须在代码停止时的一段时间内工作。重新加载后即使时间到了也会自动调用

© www.soinside.com 2019 - 2024. All rights reserved.