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()

用法举例说明:

schedule.every().seconds 	# 每秒运行一次
schedule.every(2).seconds 	# 每2秒运行一次
schedule.every(1).to(5).seconds # 每1-5秒运行一次
schedule.every().minutes 	# 每分钟运行一次
schedule.every().hour 		# 每小时运行一次
schedule.every().day 		# 每天运行一次如果后面没有at表示每天当前时间执行一次
schedule.every().day.at("00:00"). 	# 每天凌晨运行一次
schedule.every().week 		# 每周凌晨运行一次
schedule.every().wednesday.at("00:00") 	# 每周三凌晨运行一次

# 周一到周日
monday
tuesday
wednesday
thursday
friday
saturday
sunday

# 关于 at() 的一些技巧
at(HH:MM:SS) 	# 设置时分秒
at("00:00") 	# 凌晨一点
every().hour.at(':30') 		# 每小时30分
every().minute.at(':30') 	# 每分钟30秒
# 关于day与days以及week和weeks,monday与mondays等等等等
# 你能用day的地方一定能用days其他也一样
# 如果every()里面值不为1或者空时候必须用他复数
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()
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()
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()

(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()

三、取消任务和取消指定任务

取消任务:

schedule.clear()

取消指定任务:

# 需要引入tap
def greet(name):
    print('Hello {}'.format(name))

# 为每个任务设置tag
schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend')
schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend')
schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')
schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest')

schedule.clear('daily-tasks') # 取消所有标签为daily-tasks的任务

-End-

风影OvO

风影OvO, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权 | 转载请注明原文链接

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐