【问题标题】:How do i schedule a async function for a bot using apscheduler如何使用 apscheduler 为机器人安排异步功能
【发布时间】:2022-07-21 03:23:50
【问题描述】:

我想使用 apscheduler 来安排一个异步函数

如果我向机器人添加作业,并且在重新启动机器人后以某种方式停止运行机器人,它应该继续该功能。

就像我每 3 小时安排一次异步功能,我的机器人在中间停止,然后我重新启动了机器人(重新启动时我们将正常执行 schedular.start())。我想让该异步功能再次继续而无需再次添加。

我试过这个,但它不起作用

from apscheduler.executors.asyncio import AsyncIOExecutor
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from pytz import utc

import datetime

jobstores = {
    'default': SQLAlchemyJobStore(url=database_url),
}

executors = {
    'default': AsyncIOExecutor(),
}

job_defaults = {
    'coalesce': False,
    'max_instances': 1
} 

scheduler = AsyncIOScheduler(jobstores=jobstores,
                             executors=executors,
                             job_defaults=job_defaults,
                             timezone=utc)

async def myfunc():
    print("result")

trigger_time = datetime.datetime.utcnow() + datetime.timedelta(hours=3)
scheduler.add_job(myfunc, 'interval',id=55454,run_date=trigger_time)
scheduler.start()
 

【问题讨论】:

    标签: python python-asyncio apscheduler


    【解决方案1】:

    认为你所拥有的一切都是正确的,除了你如何安排它。您正在为作业的时间间隔提供日期时间。尝试类似

    scheduler.add_job(myfunc, 'interval', hours=3)
    

    有关该方法的更多信息,请参见此处:https://apscheduler.readthedocs.io/en/3.x/modules/triggers/interval.html

    还有'calendarinterval',如果您需要使用日期可能会很有用:https://apscheduler.readthedocs.io/en/master/modules/triggers/calendarinterval.html

    最后,如果 id=55454 是你的函数的参数,它需要作为一个列表提供,如 scheduler.add_job(myfunc, 'interval', hours=3, args=[55454]) https://apscheduler.readthedocs.io/en/latest/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler.add_job

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 2015-05-27
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多