APScheduler现在如何触发工作

时间:2015-08-26 15:35:23

标签: python apscheduler

我在Flask应用程序中有一个APScheduler,会在一定时间间隔内发送事件。

现在我需要"刷新"所有工作,实际上只是启动它们现在如果他们不在没有触及定义的时间间隔的情况下运行。

我尝试调用job.pause()然后调用job.resume(),并使用job。 reschedule_job(...)会触发它,但也会改变我不想要的间隔......

我的实际代码如下:

cron = GeventScheduler(daemon=True)
# Explicitly kick off the background thread
cron.start()

cron.add_job(_job_time, 'interval', seconds=5, id='_job_time')
cron.add_job(_job_forecast, 'interval', hours=1, id='_job_forecast_01')

@app.route("/refresh")
def refresh():
    refreshed = []
    for job in cron.get_jobs():
         job.pause()
         job.resume()
         refreshed.append(job.id)
    return json.dumps( {'number': len(cron.get_jobs()), 'list': refreshed} )

3 个答案:

答案 0 :(得分:18)

我不鼓励在接受的答案中提出job.func()。调度程序不会意识到作业正在运行的事实,并且会搞乱常规调度逻辑。

而是使用作业的modify()函数将其next_run_time属性设置为now()

for job in cron.get_jobs():
    job.modify(next_run_time=datetime.now())

Also refer to the actual implementation of class Job

答案 1 :(得分:1)

答案很晚,但是我认为您需要的只是在“刷新”路径中调用方法。

答案 2 :(得分:-2)

您也可以直接运行作业功能。

for job in cron.get_jobs():
    job.func() 

如果您将args或kwargs传入此函数,则必须从job.args和/或job.kwargs中删除它们。见apscheduler.job.Job