定时任务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))

202210816130 秒执行

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)
posted @   Python-moon  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示