Python 实现定时任务的八种方案( 四 )

触发器参数:interval
interval间隔调度

  • weeks (int) – 间隔几周
  • days (int) – 间隔几天
  • hours (int) – 间隔几小时
  • minutes (int) – 间隔几分钟
  • seconds (int) – 间隔多少秒
  • start_date (datetime|str) – 开始日期
  • end_date (datetime|str) – 结束日期
  • timezone (datetime.tzinfo|str) – 时区
sched.add_job(job_function, 'interval', hours=2)触发器参数:cron
cron调度
  • (int|str) 表示参数既可以是int类型,也可以是str类型
  • (datetime | str) 表示参数既可以是datetime类型,也可以是str类型
  • year (int|str) – 4-digit year -(表示四位数的年份,如2008年)
  • month (int|str) – month (1-12) -(表示取值范围为1-12月)
  • day (int|str) – day of the (1-31) -(表示取值范围为1-31日)
  • week (int|str) – ISO week (1-53) -(格里历2006年12月31日可以写成2006年-W52-7(扩展形式)或2006W527(紧凑形式))
  • day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) – (表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示)
  • hour (int|str) – hour (0-23) – (表示取值范围为0-23时)
  • minute (int|str) – minute (0-59) – (表示取值范围为0-59分)
  • second (int|str) – second (0-59) – (表示取值范围为0-59秒)
  • start_date (datetime|str) – earliest possible date/time to trigger on (inclusive) – (表示开始时间)
  • end_date (datetime|str) – latest possible date/time to trigger on (inclusive) – (表示结束时间)
  • timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone) -(表示时区取值)
CronTrigger可用的表达式:
表达式 参数类型 描述 * 所有 通配符 。例:minutes=*即每分钟触发 * / a 所有 每隔时长a执行一次 。例:minutes=”* / 3″ 即每隔3分钟执行一次 a – b 所有 a – b的范围内触发 。例:minutes=“2-5” 。即2到5分钟内每分钟执行一次 a – b / c 所有 a – b范围内,每隔时长c执行一次 。 xth y 日 第几个星期几触发 。x为第几个,y为星期几 last x 日 一个月中,最后一个星期的星期几触发 last 日 一个月中的最后一天触发 x, y, z 所有 组合表达式,可以组合确定值或上述表达式
# 6-8,11-12月第三个周五 00:00, 01:00, 02:00, 03:00运行sched.add_job(job_function, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')# 每周一到周五运行 直到2024-05-30 00:00:00sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2024-05-30'Executor 执行器Executor在scheduler中初始化,另外也可通过scheduler的add_executor动态添加Executor 。每个executor都会绑定一个alias,这个作为唯一标识绑定到Job,在实际执行时会根据Job绑定的executor找到实际的执行器对象,然后根据执行器对象执行Job 。
Executor的种类会根据不同的调度来选择,如果选择AsyncIO作为调度的库,那么选择AsyncIOExecutor,如果选择tornado作为调度的库,选择TornadoExecutor,如果选择启动进程作为调度,选择ThreadPoolExecutor或者ProcessPoolExecutor都可以 。
Executor的选择需要根据实际的scheduler来选择不同的执行器 。目前APScheduler支持的Executor:
  • executors.asyncio:同步io,阻塞
  • executors.gevent:io多路复用,非阻塞
  • executors.pool: 线程ThreadPoolExecutor和进程ProcessPoolExecutor
  • executors.twisted:基于事件驱动
Jobstore 作业存储Jobstore在scheduler中初始化,另外也可通过scheduler的add_jobstore动态添加Jobstore 。每个jobstore都会绑定一个alias,scheduler在Add Job时,根据指定的jobstore在scheduler中找到相应的jobstore,并将job添加到jobstore中 。作业存储器决定任务的保存方式,默认存储在内存中(MemoryJobStore),重启后就没有了 。APScheduler支持的任务存储器有:
  • jobstores.memory:内存
  • jobstores.mongodb:存储在mongodb
  • jobstores.redis:存储在redis
  • jobstores.rethinkdb:存储在rethinkdb
  • jobstores.sqlalchemy:支持sqlalchemy的数据库如MySQL,sqlite等
  • jobstores.zookeeper:zookeeper
不同的任务存储器可以在调度器的配置中进行配置(见调度器)
Event 事件Event是APScheduler在进行某些操作时触发相应的事件,用户可以自定义一些函数来监听这些事件,当触发某些Event时,做一些具体的操作 。常见的比如 。Job执行异常事件 EVENT_JOB_ERROR 。Job执行时间错过事件 EVENT_JOB_MISSED 。


推荐阅读