欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python3实现定时任务的一种工具:APScheduler

程序员文章站 2022-07-14 18:40:04
...

Python3实现定时任务的一种工具:APScheduler

项目开发过程中难免会遇到需要定时触发任务的需求,而我们又不可能人工定时触发这些任务。可行的定时任务实现方法有很多,如:Celery、crontab、APScheduler、手写脚本等。

Celery功能固然强大,但是单纯为了实现定时任务而调用Celery未免太过浪费,操作也比较繁琐。今天介绍一个强大又不失简洁的定时任务工具:APScheduler。

Ubuntu环境 安装方法

pip install apscheduler

使用方法举例:

import time
from apscheduler.schedulers.blocking import BlockingScheduler


def job_func():
     print('Current time: ', time.ctime())

scheduler = BlockingScheduler()

# 每小时触发一次job_func;
scheduler.add_job(job_func, 'date', run_date='2019-08-11 16:00:20')

# 每隔1分钟执行一次 job_func;
scheduler .add_job(job_func, 'interval', minutes=1)

# 带有起止时间的interval;
scheduler.add_job(job_func, 'interval', minutes=0.1, start_date='2019-08-11 16:02:20', end_date='2019-08-11 16:02:40')

# 截止到2019年12月31日前,每个周一到周四,每分钟的0秒时刻,执行一次job_func;
scheduler.add_job(job_func, 'cron', day_of_week='0-4', hour='8-16', minute='0-59', second='0', end_date='2019-12-31')

scheduler.start()

APScheduler分为以下几个模块:触发器、任务存储器、执行器、调度器

APScheduler的触发器分为三种类型:date(日期触发),interval(固定间隔触发),cron(周期触发)。日期触发不用多说,周期触发相比于固定间隔触发,区别在于:周期触发可以理解成特定时期内的固定间隔触发,换句话说,我们可以为不同时间段设置不同的触发间隔。

APScheduler的任务存储器是比较强大的,因为我们可以根据需求,采用不同的任务存储位置。针对 比较简单的、不需要保持状态的任务,可以采用MemoryJobStore作为存储方式(MemoryJobStore也是默认存储方式);而对于实现了状态保持的任务,则需要选用相应的数据库来实现任务存储,比如常用的SQLAlchemyJobStore

APScheduler的执行器也有多种类型可选,比如针对I/O密集型任务,可以选用ThreadPoolExecutor;而对于计算密集型任务,则可选用ProcessPoolExecutor,从而充分利用多核资源。

本文参考自:http://www.chenxm.cc/article/829.html