微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在具有特定开始时间的时间间隔内安排 Python 作业 - Apscheduler

如何解决无法在具有特定开始时间的时间间隔内安排 Python 作业 - Apscheduler

我们需要按小时在 Flask 中安排 Python 作业,下面的代码片段按预期工作..

   from apscheduler.schedulers.background import BackgroundScheduler
   scheduler = BackgroundScheduler()
   scheduler.add_job(func=sched,trigger="interval",seconds=60*60)
   scheduler.start()
   atexit.register(lambda: scheduler.shutdown())

但面临的挑战是,我们通常会在太平洋标准时间下午 2:00 到下午 4:00 之间的任何地方部署我们的应用程序。例如,下午 2:15 是代码部署成功的实例。上面的代码从下午 3:15 开始触发,间隔为 1 小时。但是,我们希望 Python 作业从下午 3:00 开始触发,并且间隔 1 小时。

简单来说:如果代码部署在下午 2:15 --> 作业开始时间应该是下午 3:00、下午 4:00、下午 5:00...等等。

所以我们尝试了 next_run_time 但没有成功:--> 代码甚至没有触发

from apscheduler.schedulers.background import BackgroundScheduler
start_at=datetime.Now(timezone('America/Los_Angeles')).replace(microsecond=0,second=0,minute=0)+timedelta(minutes=60) #To convert 2:15 PM to 3:00 PM
scheduler = BackgroundScheduler()
scheduler.add_job(func=sched_onefilm,seconds=60*5,next_run_time=start_at)
scheduler.start()
atexit.register(lambda: scheduler.shutdown())

也试过开始日期:--> 代码甚至没有触发

from apscheduler.schedulers.background import BackgroundScheduler
start_at=datetime.Now(timezone('America/Los_Angeles')).replace(microsecond=0,minute=0)+timedelta(minutes=60)
scheduler = BackgroundScheduler()
scheduler.add_job(func=sched_onefilm,start_date=start_at)
scheduler.start()
atexit.register(lambda: scheduler.shutdown())

如果有人可以建议/帮助我们解决问题所在,这将有助于解决这个问题。

提前致谢。

解决方法

你试过 simple_scheduler ... 吗?

from simple_scheduler.event import event_scheduler
TZ = "America/Los_Angeles"
hour = ["0"+str(h) if h//10 == 0 else str(h) for h in range(0,24)]
WHEN = ["*|"+str(h)+":00" for h in hour]

event_scheduler.add_job(target = sched,when = WHEN,tz = TZ)
event_scheduler.run()
,

这里有 3 个链接,我认为它们可以回答您的问题。您需要仔细阅读文档以自定义您的特定解决方案。

所有 3 个都来自 Digital Ocean 的文档:

  1. https://apscheduler.readthedocs.io/en/stable/userguide.html#configuring-the-scheduler
  2. https://apscheduler.readthedocs.io/en/stable/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler
  3. https://apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html#module-apscheduler.triggers.cron

在第三个链接中,他们声明:“例如,day=1,minute=20 相当于 year='',month='',day=1,week='',day_of_week='',hour='*',minute=20,second=0。然后该作业将在每年每个月的第一天每小时 20 分钟执行。"

我希望我的 cron 作业每天凌晨 1 点运行,所以我使用了:

scheduler.add_job(func=renew_subscription,trigger="cron",hour=1)

但出于测试目的,我使用了这样的方法,以便我可以看到代码在 30 秒标记处每分钟运行一次:

scheduler.add_job(func=renew_subscription,second=30)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。