模块功能
定时任务
1.单次定时任务(在某个时刻运行一次)
2.循环定时任务(①固定间隔运行,如每隔1小时②某个时间条件运行,如每天5点)
一、模块导入及定时任务函数编写
# 非阻塞模式
# 此模式定时任务之后的代码会正常运行
from apscheduler.schedulers.background import BackgroundScheduler
# 阻塞模式
# 此模式下,定时任务未完成前,后面的代码不会运行(一般此模式仅在单次定时任务时用)
from apscheduler.schedulers.background import BlockingScheduler
# 定义一个用于定时任务的函数
# 此处简单写个用于输出传入的字符串功能,下文均以此示例函数演示
def my_job(str):
pring(str)
二、模块使用
1.单次定时任务(阻塞模式)
sched = BlockingScheduler()
sched.add_job(my_job, trigger="date", run_date="2023-05-19 11:03:10", args=("哈哈哈",))
sched.start()
第一行实例化定时任务对象,模式为阻塞式
第二行添加定时任务,"my_job"指定用于定时任务的函数,不要带括号;"run_date"用于指定任务运行时间,"args"用于指定传给函数的参数,元组类型
第三行启动定时任务
阻塞模式下,在定时任务运行完成前,之后的代码均不会运行。
2.单次定时任务(非阻塞模式)
sched = BackgroundScheduler()
sched.add_job(my_job, trigger="date", run_date="2023-05-19 11:03:10", args=("哈哈哈",))
sched.start()
time.sleep(30)
第一行实例化定时任务对象,模式为非阻塞式
第二行添加定时任务,"my_job"指定用于定时任务的函数,不要带括号;"run_date"用于指定任务运行时间,"args"用于指定传给函数的参数,元组类型
第三行启动定时任务
第四行等待30秒。因为非阻塞模式下,定时任务部分代码会放入后台(或者其他线程运行),后面的代码会紧跟着运行,需要保证主线程在定时任务运行完之前未结束运行。这里用了最简单的等待方式,正式程序,要么后面有其他的代码,要么会用条件循环通过判断任务列表是否为空进行处理。
3.固定间隔循环任务(非阻塞模式)
sched = BackgroundScheduler()
sched.add_job(my_job, trigger="interval", hours=1, args=("哈哈哈",), start_date="2023-05-19 11:03:10", end_date="2023-05-20 11:03:10")
sched.start()
jobs = sched.get_jobs()
while len(jobs) > 0:
jobs = sched.get_jobs()
else:
pass
第一行实例化定时任务对象,模式为非阻塞式
第二行添加定时任务,"my_job"指定用于定时任务的函数,不要带括号;hour=1部分用于描述间隔,可用间隔有(weeks,隔几周;days,隔几天;hours,隔几小时;minutes,隔几分钟;senconds,隔几秒);start_date、end_date用于指定开始和结束定时任务的时间范围
第三行启动定时任务
第四行到结束用于保证定时任务运行完之前主线程不结束。通过get_jobs方式获取还在运行的任务数量(未运行完成的都处于还在运行状态,单次运行的任务运行1次后会结束运行状态,循环任务在超过运行时间后也会结束运行状态),判断是否定时任务是否运行结束。