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秒
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值