job_defaults = {
'coalesce': True,
'misfire_grace_time': None
scheduler = BackgroundScheduler(job_defaults=job_defaults)
scheduler.add_job(……, misfire_grace_time=None, coalesce=True)
每个任务都有一个misfire_grace_time,单位:秒,默认是0秒。意思是 那些错过的任务在有条件执行时(有线程空闲出来/服务已恢复),如果还没有超过misfire_grace_time,就会被再次执行。如果misfire_grace_time=None,就是不论任务错过了多长时间,都会再次执行。
原文:
misfire_grace_time: seconds after the designated runtime that the job is still allowed to be run (or None
to allow the job to run no matter how late it is)
如果有个任务C是每2分钟执行一次的周期性任务,且设置了较长misfire_grace_time ,结果服务停了10分钟,10分钟后服务恢复,那么错过的5个任务C都会执行。这种情况下,如果你只想执行1个任务C,可以设置coalesce = True。
When this happens, the job is considered to have “misfired”. The scheduler will then check each missed execution time against the job’s misfire_grace_time option (which can be set on per-job basis or globally in the scheduler) to see if the execution should still be triggered. This can lead into the job being executed several times in succession.
If this behavior is undesirable for your particular use case, it is possible to use coalescing to roll all these missed executions into one. In other words, if coalescing is enabled for the job and the scheduler sees one or more queued executions for the job, it will only trigger it once. No misfire events will be sent for the “bypassed” runs.
不知你有没有遇到APScheduler定时任务部分未执行的情况,我反正是遇到了,任务随机性的不执行,一看官网文档,才知道是自己的使用方法不对。 当前网上的大多数文章都只说了基本的使用方法,没说注意事项。我在这里整理一下:1. Executor 是默认大小为10的ThreadPoolExecutor。原文:from apscheduler.schedulers.background import
1. 定义全局变量scheduler
import apscheduler.scheduler.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.start()
2. 问题
2.1 在定时任务正常执行过程中,如果服务挂掉了,下次再次启动时,前面next_run_time时间点执行的任务不会被执行了,更新next_run_time为当前最新执行的时间
def scheduler_tas
flask项目使用flask_apscheduler运行定时任务,直接运行可以执行定时任务,但是通过uwsgi部署到服务器后任务不执行。
首先在uwsgi.ini中添加
enable-threads = true
然后值得注意的是,不要将以下代码写到if name == 'main’中:
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()
应当将任务的注册放到入口外面,仅将app.run()放到入口里