我在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} )
答案 0 :(得分:18)
我不鼓励在接受的答案中提出job.func()
。调度程序不会意识到作业正在运行的事实,并且会搞乱常规调度逻辑。
而是使用作业的modify()
函数将其next_run_time
属性设置为now()
:
for job in cron.get_jobs():
job.modify(next_run_time=datetime.now())
答案 1 :(得分:1)
答案很晚,但是我认为您需要的只是在“刷新”路径中调用方法。
答案 2 :(得分:-2)
您也可以直接运行作业功能。
for job in cron.get_jobs():
job.func()
如果您将args或kwargs传入此函数,则必须从job.args
和/或job.kwargs
中删除它们。见apscheduler.job.Job