我在用bottle搭建轻量测试服务的时候,除了api,也需要一个定时任务服务。我希望定时服务和bottle的装饰器风格保持类似,并且支持cron表达式,支持一定的安全机制(例如任务超时时队列不要溢出),然后依赖应该尽可能轻量。
调研一圈发现:
sched是系统自带库,无额外依赖。虽然支持定时任务,但对定时的支持很弱,不支持cron表达式,也不支持循环重入和自动调度
apscheduler支持比较完善,可以做到任务的并发调度和超时规避,也支持cron表达式化的任务。但是这个库比较大,依赖比较重,用起来也不是足够简洁(不像bottle的路由注册那么轻量)
还有不少cron库支持cron表达式,但是却是操作的系统的crontab,对系统有侵入,不满足我定时任务作为业务服务的场景
croniter支持计算cron表达式和下次的调度时间,但是却不支持执行任务
综合上述,我并没有找到特别适合的轻量定时任务框架,所以就利用croniter和sched,自己封装了一个库并上传到了pypi(想上传自己的库,可参考这里,我的另一篇文章)
目前支持python3.6或以上版本,可以用pip安装
pip install cron-lite
使用比较简单,直接装饰就可以把函数变成定时任务执行
from cron_lite import cron_task, start_all
import time
@cron_task("* * * * * 0/2")
def event1():
print("event1", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())