Python----使用schedule模块可以非常简单地设置定时任务

【原文链接】

一、安装

pip install schedule

二、schedule模块的用法

1 设置每x周/天/小时/分钟/秒执行一次

如下分别列举了每两秒、每两分钟、每两小时、每两天、每两周执行一次的代码

import schedule
import time

def do_func():

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func ...")
    

def main():
    # 每两秒执行一次
    schedule.every(2).seconds.do(do_func)
    # 每两分钟执行一次
    schedule.every(2).minutes.do(do_func)
    # 每两小时执行一次
    schedule.every(2).hours.do(do_func)
    # 每两天执行一次
    schedule.every(2).days.do(do_func)
    # 每两周执行一次
    schedule.every(2).weeks.do(do_func)

    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

上述代码时间间隔较长,无法执行演示,下面只执行每2秒执行一次的代码如下:

import schedule
import time

def do_func():

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func ...")

def main():
    schedule.every(2).seconds.do(do_func)

    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

执行结果如下:

2022-05-24 23:15:01 in do func ...
2022-05-24 23:15:03 in do func ...
2022-05-24 23:15:05 in do func ...
2022-05-24 23:15:07 in do func ...
2022-05-24 23:15:09 in do func ...
2022-05-24 23:15:11 in do func ...
2022-05-24 23:15:13 in do func ...

2 设置定时执行

设置在每分钟的多少秒时,每小时多少分的时刻,每天几点等等指定时间点执行的设置方法如下所示

import schedule
import time

def do_func():

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func ...")


def main():
    # 每分钟的30秒时执行
    schedule.every().minute.at(":30").do(do_func)
    # 每小时10分时执行
    schedule.every().hour.at(":10").do(do_func)
    # 每小时10分30秒时执行
    schedule.every().hour.at("10:30").do(do_func)
    # 每间隔5个小时的10分30秒时执行,比如当前时间7:00,则下一次执行时间为 12:10:30
    schedule.every(5).hour.at("10:30").do(do_func)
    # 每天10点30分执行
    schedule.every().days.at("10:30").do(do_func)
    # 每天10点30分30秒执行
    schedule.every().days.at("10:30:30").do(do_func)
    # 每两天10点30分30秒执行,比如现在执行,明天不执行,后天10:30:30时再次执行
    schedule.every(2).days.at("10:30:30").do(do_func)
    # 每周周一执行
    schedule.every().monday.do(do_func)
    # 每周周三早上8:30执行
    schedule.every().wednesday.at("08:30").do(do_func)
    # 每周周日凌晨 00:00:01 时执行
    schedule.every().sunday.at("00:00:01").do(do_func)

    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

上述代码时间跨度比较长如法代码演示,下面只演示每分钟30处执行的场景,代码如下:

import schedule
import time

def do_func():

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func ...")


def main():
    # 每分钟的30秒时执行
    schedule.every().minute.at(":30").do(do_func)

    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

执行结果如下:

2022-05-24 23:36:30 in do func ...
2022-05-24 23:37:30 in do func ...
2022-05-24 23:38:30 in do func ...
2022-05-24 23:39:30 in do func ...
2022-05-24 23:40:30 in do func ...
2022-05-24 23:41:30 in do func ...
2022-05-24 23:42:30 in do func ...

3 可以通过装饰器设置定时任务

如下,同样是每两秒执行一次的定时任务,其他定时任务格式类似

import schedule
import time

@schedule.repeat(schedule.every(2).seconds)
def do_func():
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func ...")


def main():
    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

执行结果如下

2022-05-24 23:45:40 in do func ...
2022-05-24 23:45:42 in do func ...
2022-05-24 23:45:44 in do func ...
2022-05-24 23:45:46 in do func ...
2022-05-24 23:45:48 in do func ...
2022-05-24 23:45:50 in do func ...
2022-05-24 23:45:52 in do func ...

4 执行任务的函数可以传参数

(1)不使用装饰器的场景

代码如下,传入两个参数

import schedule
import time

def do_func(name,age):

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))


def main():
    # 每分钟的30秒时执行
    schedule.every(2).seconds.do(do_func,"张三丰",100)

    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

执行结果如下:

2022-05-24 23:56:41 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:56:43 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:56:45 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:56:47 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:56:49 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:56:51 in do func : 姓名:张三丰 年龄:100

(2)使用装饰器的场景

代码如下,传入两个参数

import schedule
import time

@schedule.repeat(schedule.every(2).seconds,"张三丰",100)
def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))


def main():
    while True:
        schedule.run_pending()

if __name__=="__main__":
    main()

执行结果如下:

2022-05-24 23:53:30 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:53:32 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:53:34 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:53:36 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:53:38 in do func : 姓名:张三丰 年龄:100
2022-05-24 23:53:40 in do func : 姓名:张三丰 年龄:100
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值