apscheduler 的应用

  咱们我的项目中总是防止不了要应用一些定时工作,比如说最近的我的项目,用户点击报名考试当前须要在考试日期邻近的时候推送小程序音讯揭示到客户微信上,翻了翻 fastapi 中的实现,尽管办法和包也不少,然而要不就是太重了(比方须要再开服务,还要依赖 redis,都不好用),尽管也能够应用 time 模块的 time.sleep()机上 fastapi 的后台任务变相实现,然而绝对简略的性能还行,简单点的代码起来就麻烦了,所以还是专人专事找个负责这个额的包吧。找来找去发现 APScheduler 就挺适宜,代码简略,实现成果也很好,这里做个记录!
装置

pip install apscheduler

次要组成部分

概念性货色,混个脸熟,代码比这些定义好了解。

触发器(trigger)蕴含调度逻辑,每一个作业有它本人的触发器,用于决定接下来哪一个作业会运行。除了他们本人初始配置意外,触发器齐全是无状态的。说人话就是你指定那种形式触发以后的工作。
类型 解释
DateTrigger 到期执行(到xxxx年x月x日 x时x分x秒执行) 对应DateTrigger
IntervalTrigger 距离执行(每5秒执行一次)
CronTrigger 一个crontab类型的条件(这个比较复杂,比方周一到周四的4-5点每5秒执行一次)
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.ltd/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
https://www.wenjuan.com/s/UZB...
作业存储(job store)存储被调度的作业,默认的作业存储是简略地把作业保留在内存中,其余的作业存储是将作业保留在数据库中。一个作业的数据讲在保留在长久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。

Jobstore在scheduler中初始化,另外也可通过scheduler的add_jobstore动静增加Jobstore。每个jobstore
都会绑定一个alias,scheduler在Add Job时,依据指定的jobstore在scheduler中找到相应的jobstore,并
将job增加到jobstore中。

Jobstore次要是通过pickle库的loads和dumps【实现外围是通过python的__getstate__和__setstate__重写
实现】,每次变更时将Job动静保留到存储中,应用时再动静的加载进去,作为存储的能够是redis,也能够
是数据库【通过sqlarchemy这个库集成多种数据库】,也能够是mongodb等
目前APScheduler反对的Jobstore:

MemoryJobStore
MongoDBJobStore
RedisJobStore
RethinkDBJobStore
SQLAlchemyJobStore
ZooKeeperJobStore

执行器(executor)解决作业的运行,他们通常通过在作业中提交制订的可调用对象到一个线程或者进城池来进行。当作业实现时,执行器将会告诉调度器。