python+schedule定时器执行任务

目录

制定任务定时器 

通过装饰器方法执行

任务标签

任务运行到某一时间停止

运行所有任务


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秒

猜你喜欢

转载自blog.csdn.net/JBY2020/article/details/131855431
今日推荐