【问题标题】:python apschedule BlockingScheduler with interval trigger: Start immediately带有间隔触发器的python apschedule BlockingScheduler:立即启动
【发布时间】:2017-04-06 11:56:10
【问题描述】:

我正在使用 python apscheduler 每 45 分钟安排一次特定任务。问题是,当我添加作业并启动调度程序时,它从现在开始 45 分钟。

from apscheduler.schedulers.blocking import BlockingScheduler

class myClass:

    def schedule(self):
        self.scheduler = BlockingScheduler()
        self.scheduler.add_job(self.myJob, 'interval', minutes=45)
        self.scheduler.start()

    def myJob(self):
        print('I finally started')

我尝试设置 start_date,但没有成功。如何确保作业立即执行,而不是在第一次等待间隔后执行?

【问题讨论】:

  • 间隔触发器的设计已在即将发布的 v4.0 版本中修复,以便立即开始第一次运行。
  • 啊!迟到了。不过还没有发布。

标签: python apscheduler


【解决方案1】:

试试next_run_time=datetime.now()

【讨论】:

  • from datetime import datetime,然后我使用datetime.utcnow(),因为我使用BlockingScheduler({'apscheduler.timezone': 'UTC'})设置调度程序
【解决方案2】:

不是一个好的解决方案,但对我有用。

from apscheduler.schedulers.blocking import BlockingScheduler

class myClass:

    def schedule(self):
        self.myJob()#run your job immediately here, then scheduler
        self.scheduler = BlockingScheduler()
        self.scheduler.add_job(self.myJob, 'interval', minutes=45)
        self.scheduler.start()

    def myJob(self):
        print('I finally started')

【讨论】:

    【解决方案3】:

    对于一个有据可查的简单任务来说,给出的答案太复杂了: https://apscheduler.readthedocs.io/en/3.x/modules/triggers/date.html#examples

    添加要立即运行的作业:

    'date' 触发器和作为 run_date 的 datetime.now() 是隐式的

    sched.add_job(my_job)
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2022-01-09
      • 1970-01-01
      • 2022-11-13
      • 2013-05-20
      • 1970-01-01
      • 2018-10-14
      • 2021-03-31
      • 1970-01-01
      相关资源
      最近更新 更多