目录
制定任务定时器
通过装饰器方法执行
任务标签
任务运行到某一时间停止
运行所有任务
schedule是一个三方的轻量级定时任务调度库,可完成每分钟,每小时,每天,周几等特定日期的定时任务。schedule方法是串行的,如果各任务间时间不冲突便没问题,如果时间有冲突时,会串行执行命令。
schedule具有一定的局限性:
- 定时任务不能出现在死循环中,执行当有终止的出口。
- 每次执行定时任务都会开启新的线程,容易行程线程堆积。
import time
import schedule
def test1(p1, p2):
print(f'{time.localtime(time.time()), p1, p2}')
def test2():
print(time.localtime(time.time()))
def func():
# do方法中为要执行的任务函数及任务函数的参数
schedule.every(3).seconds.do(test1, 1, p2=2) # seconds或second, 每隔3秒执行一次test1,默认参数为1
# # schedule.every(3).minutes.do(test2) # minutes或minute, 每隔3分钟执行一次test2
schedule.every().minute.at(':30').do(test2) # 每分钟的30秒执行
schedule.every().hours.do(test2) # hours或hour,每隔1小时执行
schedule.every().day.at("08:30").do(test2) # 每天8:30执行
schedule.every(2).to(5).days.do(test2) # 每隔2到5天执行一次,可以是隔秒/分/时/天/月/年,使用every(2).to(5)
schedule.every(2).to(5).seconds.do(test2) # 每隔2到5天执行一次
schedule.every().monday.do(test2) # 每周周一执行
schedule.every().saturday.at("08:00").do(test2) # 每周周六早8点执行
i = 1
while i <= 20:
schedule.run_pending()
i += 1
import time
from schedule import every, repeat, run_pending
@repeat(every(2).seconds)
def test3():
print(time.localtime(time.time()))
@repeat(every(2).seconds, p1='1', p2=2) # 装饰器传参
def test4(p1, p2):
print(f'{time.localtime(time.time()), p1, p2}')
# return schedule.CancelJob # CancelJob执行一次后取消日程工作任务
def func2():
i = 1
while i <= 20:
time.sleep(1)
run_pending()
i += 1
schedule.every().seconds.do(test2).tag('t1', 't2')
schedule.every().seconds.do(test1, 1, 2).tag('t1')
tags = schedule.get_jobs('t2') # 检索任务:schedule.get_jobs(),没有参数检索所有任务
print(tags)
schedule.clear() # 清空任务,参数为标签,没有参数清除所有
schedule.every().second.until('00:00').do(job) # 今天00:00停止
schedule.every().second.until('2022-01-01 00:00').do(job) # 2022-01-01 00:00停止
schedule.every().second.until(timedelta(hours=1)).do(job) # 1小时后停止
schedule.every().second.until(time(08, 00, 00)).do(job) # 今天08:00:00停止
schedule.every().second.until(datetime(2022, 1, 1, 00, 00, 0)).do(job) # 2022-01-01 00:00停止
schedule.run_all()
schedule.run_all(delay_seconds=1) # 任务间延迟1秒