定时任务
一般分为两种:
1.静态定时任务,一开始就知道需要在什么时候执行。
可以选择crontab 和 APScheduler
2.动态定时任务,一开始并不知道要在什么时间点执行。
这种情况,crontab就不方便了,常用APScheduler.
APScheduler
一、APScheduler介绍
1,作用:
APScheduler(advanceded python scheduler):是一款Python开发的定时任务工具;就是一个用来定时的模块。
2,特点
不依赖于Linux系统的crontab系统定时,独立运行;可以单独开一个进程或者线程执行。
可以动态添加新的定时任务:
如:下单后30分钟内必须支付,否则取消订单,就可以借助此工具(每下一单就要添加此订单的定时任务)
对添加的定时任务可以做持久保存。
3, APScheduler的基本构造:
触发器(Trigger):指定定时任务执行的时机,
1.date 在特定的时间日期执行:类似调一个闹钟固定一个时间就执行
2.interval 经过指定的时间间隔执行
3.cron 按指定的周期执行
存储器(job stores):指的是要将定时任务存储在哪里
1.MemoryJobStore 内存 (默认)
2.MongoDBJobStore
3.RedisJobStore
4.SQLAlchemyJobStore
执行器(executors):在执行该定时任务时,以进程或线程方式执行任务
1.ThreadPoolExecutor
2.ProcessPoolExecutor
调度器(Scheduler):负责管理定时任务
1.BlockingScheduler 单独运行
2.BackGroundScheduler 融合到web程序中((如Django、Flask))
二、基本使用
1,安装apscheduler工具
pip install apscheduler # Python开发的:python下载包都用pip
2,基本使用步骤:
1,导包:根据需要导入调度器(BackgroundScheduler或BlockingScheduler )
2,定义定时任务,即定义好需要进行定时的任务函数
3,创建要进行定时任务的调度器对象
4,向调度器对象中添加上该任务
5,启动定时任务,使用start()方法
3,代码实现
# 导入调度器(以独立运行模块为例),导入执行器(以进程为例)
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.executors.pool import ProcessPoolExecutor
# 配置执行器:如:使用进程的方式运行定时任务,同一时刻,最多有3个进程同时运行
executor={
"default":ProcessPoolExecutor(3)
}
# 创建任务:如打印1111的任务
def my_job():
print("1111")
# 创建调度器对象:指定执行器为executor
scheduler=BlockingScheduler(executors=executor)
# 添加定时任务:(以date触发器为例:2020-3-29 11:55:00触发任务)
scheduler.add_job(my_job,"date",run_date="2020-3-29 11:55:00")
if __name__ == "__main__":
# 启动定时任务
scheduler.start()
三,触发器Trigger
add_job()方法将任务添加进定时器中的方法为:
add_job(执行的函数,触发器,时间)
触发器是在使用添加任务方法add_job()的时候,通过参数的方式进行配置的。
1,触发器:date
date触发器时的时间参数run_date(也可以写成next_run_time)的写法:
# 在2019年11月6日00:00:00执行:
run_date=date(2009, 11, 6)
# 在2019年11月6日16:30:05:
run_date=datetime(2009, 11, 6, 16, 30, 5)或run_date='2009-11-06 16:30:05'
# 立即执行:不添加时间