一、简介
python中的轻量级定时任务调度库:schedule,可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。
库的安装还是最简单的pip install schedule,使用起来也是很容易理解。
二、简单示例
#基本格式
#创建方法
def func():
print("方法")
#创建定时
schedule.every().seconds.do(func) #每秒运行一次
#如果方法需要传参的话do(func,参数1)
#开循环
while True:
schedule.run_pending()
#如果值运行一次schedule.every().day.do(func).run()
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") 每周三凌晨运行一次
#at一些技巧
at(HH:MM:SS)
at("00:00") 凌晨一点
every().hour.at(':30') 每小时30分
every().minute.at(':30') 没分钟30秒
三、取消任务和取消指定任务
取消任务
schedule.clear()
取消指定任务
#需要引入tap
def greet(name):
print('Hello {}'.format(name))
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') #q取消所有标签为daily-tasks的任务
如何让任务值执行一次? 就是在定义任务的时候加个return
注意事项:
唯一要注意的是,这里面job不应当是死循环类型的,也就是说,这个线程应该有一个执行完毕的出口。一是因为线程万一僵死,会是非常棘手的问题;
二是下一次定时任务还会开启一个新的线程,执行次数多了就会演变成灾难。如果schedule的时间间隔设置得比job执行的时间短,一样会线程堆积形成灾难。