APScheduler现在如何触发工作

rha*_*amo 9 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} )
Run Code Online (Sandbox Code Playgroud)

Lar*_*erg 22

我不鼓励job.func()在接受的答案中提出建议.调度程序不会意识到作业正在运行并且会使常规调度逻辑陷入困境.

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

for job in cron.get_jobs():
    job.modify(next_run_time=datetime.now())
Run Code Online (Sandbox Code Playgroud)

另请参阅类的实际实现Job.


Eve*_*ews -4

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

for job in cron.get_jobs():
    job.func() 
Run Code Online (Sandbox Code Playgroud)

如果您将 args 或 kwargs 传递到函数中,则必须将它们从job.argsand/or中取出job.kwargs。请参阅apscheduler.job.Job