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

来源:redrose2100

物联沃分享整理
物联沃-IOTWORD物联网 » Python—-使用schedule模块可以非常简单地设置定时任务

发表评论