一、安装
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-