APScheduler的全称是Advanced Python Scheduler。APScheduler能够让任务延时执行或定时执行,还可以根据需求随时添加或删除指定的任务。它还允许将任务存储在数据库中,不会因为程序异常而丢失任务。
安装命令如下:
pip install apscheduler
APScheduler 时间格式:
- date:在某个特定时间仅执行一次,支持类UNIX系统中的Crontab时间格式
- interval:以固定的时间间隔执行,时间单位支持秒、分、时、周等。
- cron:在某个特定的时间执行,支持类UNIX系统中的Crontab时间格式。
APScheduler 四大组件分别是触发器,任务存储,执行器,调度器。
·触发器的作用是确定该何时执行任务。
·任务存储中存放的是任务属性,其中包括时间格式。它的默认存储是程序申请的内存空间,但允许开发者将其切换为支持MySQL的SQLAlchemy,或者将作业存储到MongoDB中,又或者将作业存储到Redis中。
·执行器负责执行任务,它会将作业存储中记录的可调用对象交给线程池或进程池执行。
·调度器使APScheduler适用于不同的框架。例如,AsyncIO模块下应该使用AsyncIOScheduler;Gevent框架中应该使用GeventScheduler;没有使用框架的Python程序应该使用BlockingScheduler。
简单使用实例:
由于并没有使用任何框架,所以代码导入的调度器是BlockingScheduler。初始化调度器后,调用add_job()方法设置一个时间间隔为2秒的任务,这里的任务指向show_time()方法。代码运行结果如下:
从运行结果得知,本次设定的时间间隔为2秒的任务被成功执行。这里指定的时间格式为interval,seconds代表时间单位为秒,如果将seconds改为minutes,就可以把时间单位换成分,其他时间单位可翻阅APScheduler文档的apscheduler.triggers.interval部分。
cron 格式的时间:
时间间隔为每天7点到22点之间,每2分钟的第10秒执行一次的任务。
运行结果:
从运行结果得知,本次设定的时间格式为cron的任务被成功执行。cron格式下的时间单位参数可翻阅APScheduler文档的apscheduler.triggers.cron部分。这里用Crontab相同的写法设定时间间隔为每天7点到22点,每2分钟的第10秒执行一次的任务:
特定的时间执行一次,使用时间格式date。将上面调用add_job()方法的语句改为:
sched.add_job(run, 'date', run_date=datetime.datetime(2020, 12, 4, 16, 27)) # 特定的时间执行一次 程序将会在2020年12月4日16时27分执行
在特定周期内运行和结束,提供了start_date和end_date,实例如下:
"""
任务将按照此配置在2020年12月4日至202年12月5日的每天7点到22点,每2分钟的第10秒执行一次。
"""
sched.add_job(run, 'cron', minute='*/2', second='10', hour='7-22', start_date='2020-12-4', end_date='2020-12-5')
结论:
我们可以根据不同的场景和需求选择不同的定时任务设置方式,如果要在程序中使用到类似Linux中的Crontab定时,那么APScheduler是一个很好的选择。