Python中定时任务框架APScheduler入门教程
本文最后更新于:2024年6月17日 下午
前言
谈到定时任务,大家可能会优先想到 linux 中的 crontab
,或者 windows 中的任务计划。这些工具用起来都很方便,但是说出来你可能不信,最近我在生信流程中使用 crontab
命令完成一些自动化操作时,遇到问题了。
不知是不是 crontab
命令不允许有 qsub 的提交操作,还是管理员设置了 crontab
发起任务的用户没有节点访问权限。。。总之,一向很便利的 crontab
命令居然给我挖坑了。于是,我只得自己写一个定时任务。
当然,核心功能是基于今天的主角 APScheduler
定时任务框架。
安装
安装只需要一行命令。
1 |
|
如果对 Python 的环境搭建及模块安装还不熟悉,可以看看我写的另一篇博客 Python 环境搭建及模块安装 。
运行
首先介绍两个最常用的调度器:
- BlockingScheduler
阻塞式调度器:适用于只跑调度器的程序。 - BackgroundScheduler
后台调度器:适用于非阻塞的情况,调度器会在后台独立运行。
这是人说的话吗?字我都看得懂,意思一点也不明白。。。
简单说来,可以把 BlockingScheduler
看成是单线程,如果在程序中仅仅只运行定时任务,那么就应该选择阻塞式调度器。
而把 BackgroundScheduler
看成是多线程,如果在程序中除了运行定时任务,咱们还想同时做点别的计算啥的,那就应该选择后台调度器。
这里我选择使用 BlockingScheduler
阻塞式调度器,主程序只负责调度定时任务,不执行其他计算等操作。如下所示:
1 |
|
运行上面这段代码,就会在每天的 11:30 时执行 python3 spider.py
命令。
其中,出现了个新标签 cron
,这玩意儿叫触发器,可以设置定时任务触发的条件,这里就简单介绍一下这个小东西。
APScheduler 有三种内置的触发器:
date
日期,在某个具体的日期触发定时任务,仅触发一次。
1 |
|
如上所示,run_date 参数可以是 date型
或 str型
,甚至可以不显式指定。
interval
间隔,在某个时间间隔后触发定时任务,间隔触发无限次。
1 |
|
如上所示,weeks、days、hours、minutes、seconds 的参数都是 int型
。
cron
周期,在某个周期内触发定时任务,循环触发无限次。
1 |
|
该触发器的规则和 crontab
类似。各参数的说明如下:
参数 | 说明 |
---|---|
year | int 型或 str,取值四位数的年份,如 2020 年 |
month | int 型或 str,取值范围为 1-12 月 |
week | int 型或 str,取值范围为第 1-53 周 |
day_of_week | int 型或 str,表示一周中的第几天,既可以用 0-6 表示也可以用其英语缩写表示(mon,tue,wed,thu,fri,sat,sun) |
day | int 型或 str,取值范围为 1-31 日 |
hour | int 型或 str,取值范围为 0-23 时 |
minute | int 型或 str,取值范围为 0-59 分 |
second | int 型或 str,取值范围为 0-59 秒 |
start_date | datetime 型或 str,表示开始时间 |
end_date | datetime 型或 str,表示结束时间 |
更多编程教学请关注公众号:潘高陪你学编程
微信支付
支付宝