定时任务APSchedule
Python定时任务模块apscheduler
在Python中,还可以用第三方包来管理定时任务,比如celery、apscheduler。相对来说apscheduler使用起来更简单一些,这里来介绍一下apscheduler的使用方法。
首先安装起来很简单,运行pip install apscheduler
即可。
来个简单的例子看看apscheduler是如何使用的。
#encoding:utf-8
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
# 需要定时执行的任务
def sch_test():
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print('时间:{}, 测试apscheduler'.format(now))
task = BlockingScheduler()
task.add_job(func=sch_test, trigger='cron', second='*/10')
task.start()
上述例子很简单,我们首先要定义一个apscheduler的对象,然后add_job添加任务,最后start开启任务就行了。
例子是每隔10秒运行一次sch_test任务,运行结果如下:
时间:2022-10-08 15:16:30, 测试apscheduler
时间:2022-10-08 15:16:40, 测试apscheduler
如果我们要在执行任务函数时携带参数,只要在add_job函数中添加args就行,比如task.add_job(func=sch_test, args=('a'), trigger='cron', second='*/10')
。
参数配置
task.add_job(func=sch_test, trigger='cron', second='*/10')
触发器triggers:
例子中我们用的是“cron”方式。我们可以选择cron、date、interval中的一个。
cron 循环执行
date 定时执行一次
interval 定时每天执行
year年份(4位数,如2022)
month月份(1-12)
day一个月的第几天(1-31)
week一年的第几周(1-53)
day_of_week一星期的第几天(0-6)
hour小时
minute分钟
second秒
start_date开始时间
end_date结束时间
timezone时区
jitter触发的误差时间
使用方法示例,在每天7点20分执行一次:
task.add_job(func=sch_test, args=('任务需要的参数',), trigger='cron',hour`='7', minute='20')
具体到某个时间的一次性任务;
# 使用run_date指定运行时间
task.add_job(func='sch_test', trigger='date', run_date=datetime.datetime(2022 ,10 , 8, 16, 1, 30))
2022年10月8日 16时 1分 30 秒执行
interval表示的是循环任务,指定一个间隔时间,每过间隔时间执行一次。
interval可设置如下的参数:
weeks 周
days 一个月的第几天
hours 小时
minutes 分钟
seconds 秒
start_date 间隔触发的开始时间
end_date 间隔触发的结束时间
jitter 触发的时间误差
使用方法示例,每隔3秒执行一次sch_test任务:
task.add_job(func=sch_test, args=('循环任务',), trigger='interval', seconds=3)。
来个例子把3种触发器都使用一遍:
# encoding:utf-8
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
def sch_test(job_type):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print('时间:{}, {}测试apscheduler'.format(now, job_type))
task = BlockingScheduler()
task.add_job(func=sch_test, args=('一次性任务',),trigger='date', next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=3))
task.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5')
task.add_job(func=sch_test, args=('循环任务',), trigger='interval', seconds=3)
task.start()
实际运用
在add_job()中添加参数: jitter: 触发的时间误差,我们将误差修改为10s。 misfire_grace_time: 添加允许容错的时间,单位为:s,一般设置为30就行了. 示例:
sched.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5', jitter=10, misfire_grace_time=30)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了