1、简述:
在我们的程序中,我们会经常用到一些定时任务,在python中也有这样的一个模块,那就是apscheduler,它主要包含了四种组件:triggers(触发器)、job stores(任务存储器)、executors(执行器)、schedulers(定时调度器)
2、apscheduler安装
第一种方式:pip install apscheduler
第二种方式:下载 python setup.py install
3、定时器种类:
BlockingScheduler:当调度器是进程中唯一运行的程序时使用
BackgroundScheduler:在不使用下面任何框架时使用,并希望调度器在应用程序的后台运行。
AsyncIOScheduler:你使用的应用程序中必须有asyncio模块
GeventScheduler:在你的应用程序中必须有gevent模块
TornadoScheduler:你的应用程序是Tornado框架可以使用
TwistedScheduler:你的应用程序是Twisted框架可以使用
QtScheduler: 在QT框架中使用
4、任务存储器:
要选择合适的任务存储,您需要确定是否需要任务持久性。如果你总是重建你的工作在你的应用程序启动的时候,然后你可以选择默认的(MemoryJobStore)。但是如果你需要你的工作来坚持调度程序重启或应用崩溃,那么你的选择通常归结为在你的编程环境中使用什么工具。如果,然而,你所处的位置自由选择,然后SQLAlcheMyJobStore在PostgreSQL后端的是推荐的选择,由于其强大的数据完整性保护。
5、执行器:
如果我们使用了上面提到的框架之一(Tornado、Twisted、Qt),通常会选择执行器。否则,默认的线程池(ThreadPoolExecutor)应大多数不够好。如果你的工作涉及到的CPU密集型操作,您应该考虑使用ProcesSpoolExecutor利用多核CPU。您甚至可以同时使用这两个,将进程池执行器添加为二级执行器。
6、触发器种类:
date:一次性任务,即只执行一次任务
interval:循环任务,即按照时间间隔执行任务
cron:定时任务,即在每个时间段执行任务
7、实例:
示例一:
指定触发器为interval:
#interval:循环任务,即按照时间间隔执行任务。
'''
参数如下:
seconds (int) – 秒
minutes (int) – 分钟
hours (int) – 小时
days (int) – 日
weeks (int) – 周
start_date (datetime|str) – 启动开始时间
end_date (datetime|str) – 最后结束时间
timezone (datetime.tzinfo|str) – 时区
'''
#!/usr/bin/env python3 # encoding:utf-8 ''' @author: lierl @file: use_scheduler.py @time: 2018/4/19 18:50 ''' import datetime __author__ = 'lierl' from apscheduler.schedulers.blocking import BlockingScheduler def job1(): print("job 1") def job2(name): print("hello %s" %name) schedule = BlockingScheduler() #每秒执行一次 有参数 schedule.add_job(func=job2, args=('lierl',), trigger='interval', seconds=1) #每秒执行一次 无参数 schedule.add_job(func=job1,trigger='interval', seconds=1) schedule.start()#启动定时器
示例二:
执行触发器为date:
# 延时五秒后执行一次 ''' date:一次性任务,即只执行一次任务。 参数如下: next_run_time (datetime|str) – 下一次任务执行时间 timezone (datetime.tzinfo|str) – 时区 ''' schedule.add_job(func=job2, args=('lierl',), trigger='date', next_run_time=datetime.datetime.now()+datetime.timedelta(seconds=5))
示例三:
指定触发器为cron:
''' cron:定时任务,即在每个时间段执行任务。 参数如下: second (int|str) – 秒 (0-59) minute (int|str) – 分钟 (0-59) hour (int|str) – 小时 (0-23) day_of_week (int|str) – 一周中的第几天 (0-6 or mon,tue,wed,thu,fri,sat,sun) day (int|str) – 日 (1-31) week (int|str) – 一年中的第几周 (1-53) month (int|str) – 月 (1-12) year (int|str) – 年(四位数) start_date (datetime|str) – 最早开始时间 end_date (datetime|str) – 最晚结束时间 timezone (datetime.tzinfo|str) – 时区 ''' #在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务 schedule.add_job(func=job1, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*')
努力成就非凡,请不要在最该奋斗的年纪选择安逸