rhaamo rhaamo -3 years ago 168
Python Question

APScheduler how to trigger job now

I have an APScheduler in a Flask app, sending events at some intervals.

Now i need to "refresh" all jobs, in fact just starting them now if they don't run without touching on the defined interval.

I'v tried to call job.pause() then job.resume() and nothing, and using job. reschedule_job(...) would trigger it but also change the interval... which i don't want.

My actual code is bellow:

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} )

Answer Source

You could just run the job function directly too.

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

If you had args or kwargs being passed into the function, you'd have to pull those out of job.args and/or job.kwargs. See apscheduler.job.Job

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download