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