文章目录
- schedule
-
- 按时间间隔执行定时任务
- [装饰器:通过 @repeat() 装饰静态方法](#装饰器:通过 @repeat() 装饰静态方法)
- 传递参数
- 取消定时任务
- 在指定时间执行一次任务
- 根据标签检索、取消任务
- 运行任务到某时间
schedule
-
安装:
pip install schedule
按时间间隔执行定时任务
-
主要注意例如day,days这种单复数的区别
且schedule方法是串行的,也就是说,如果各个任务之间时间不冲突,那是没问题的;如果时间有冲突的话,会串行的执行命令。
pythonimport schedule from datetime import datetime def job(name): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"Now_time:{now_time}, her name is : {name}") name = "张三" schedule.clear() # 清空任务 # schedule.every(3).seconds.do(job, name) # 创建一个每三秒执行一次的任务 # schedule.every().minutes.do(job,name) # 每隔1分钟执行一次 # schedule.every(10).minutes.do(job,name) # 每隔10分钟执行一次 # schedule.every().hour.do(job, name) # 每隔一小时执行一次 # schedule.every().day.do(job,name) # 每隔一天执行一次 # schedule.every(3).days.do(job,name) # 每隔三天执行一次 # schedule.every().day.at("10:30").do(job, name) # 每天上午10:30 schedule.every().day.at('17:12').do(job, name) # 每天下午17:12 # schedule.every(5).to(10).days.do(job, name) # 每隔5到10天执行一次 # schedule.every().monday.do(job, name) # 每周一的这个时候执行一次任务 # schedule.every().wednesday.at("13:15").do(job, name) #每周三13:15执行一次任务 while True: schedule.run_pending() # 运行所有可以运行的任务 time.sleep(1) """输出""" Now_time:2023-07-10 17:12:00, her name is : 张三 Now_time:2023-07-11 17:12:00, her name is : 张三
装饰器:通过 @repeat() 装饰静态方法
-
示例代码
pythonfrom datetime import datetime import schedule from schedule import every, repeat, run_pending schedule.clear() @repeat(every(3).seconds) def task1(): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time}, 任务1,每3秒执行一次") @repeat(every(10).seconds) def task2(): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time}, 任务2,每10秒执行一次") while True: run_pending() """输出""" NowTime : 2023-07-10 17:18:41, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:44, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:47, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:48, 任务2,每10秒执行一次 1 NowTime : 2023-07-10 17:18:50, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:53, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:56, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:18:58, 任务2,每10秒执行一次 1 NowTime : 2023-07-10 17:18:59, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:19:02, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:19:05, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:19:08, 任务2,每10秒执行一次 1
传递参数
-
不使用装饰器传参
pythonfrom datetime import datetime import schedule schedule.clear() def task1(string): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time}, {string}") def task2(string): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time}, 任务2,每10秒执行一次") schedule.every(3).seconds.do(task1,string='任务1,每3秒执行一次') schedule.every(10).seconds.do(task1,string='任务2,每10秒执行一次') while True: run_pending() """输出""" NowTime : 2023-07-10 17:24:25, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:28, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:31, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:32, 任务2,每10秒执行一次 NowTime : 2023-07-10 17:24:34, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:37, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:40, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:42, 任务2,每10秒执行一次 NowTime : 2023-07-10 17:24:43, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:46, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:49, 任务1,每3秒执行一次 NowTime : 2023-07-10 17:24:52, 任务2,每10秒执行一次
-
使用装饰器传参
pythonfrom datetime import datetime import schedule from schedule import every, repeat, run_pending schedule.clear() @repeat(every(3).seconds,'任务1,每3秒执行一次') def task(string): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time},{string} ") @repeat(every(10).seconds,'任务2,每10秒执行一次') def task2(string): now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"NowTime : {now_time}, {string}") while True: run_pending() """输出""" NowTime : 2023-07-10 17:27:53,任务1,每3秒执行一次 NowTime : 2023-07-10 17:27:56,任务1,每3秒执行一次 NowTime : 2023-07-10 17:27:59,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:00, 任务2,每10秒执行一次 NowTime : 2023-07-10 17:28:02,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:05,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:08,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:10, 任务2,每10秒执行一次 NowTime : 2023-07-10 17:28:11,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:14,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:17,任务1,每3秒执行一次 NowTime : 2023-07-10 17:28:20, 任务2,每10秒执行一次
取消定时任务
-
schedule.cancel_job(jobname)
pythonimport schedule import sys i = 0 def some_task(): global i i += 1 print(i) if i == 5: schedule.cancel_job(job) print('cancel job') sys.exit(0) job = schedule.every().second.do(some_task) while True: schedule.run_pending() """输出""" 1 2 3 4 5 cancel job An exception has occurred, use %tb to see the full traceback.
在指定时间执行一次任务
-
如,在最近的一分钟里30秒的时候执行一次任务
pythonimport time import schedule def task(): print('这个任务只执行一次') def job_that_executes_once(): task() return schedule.CancelJob schedule.every().minute.at(':30').do(job_that_executes_once) while True: schedule.run_pending() time.sleep(1) """输出""" 这个任务只执行一次
根据标签检索、取消任务
-
检索
python# 检索所有任务:schedule.get_jobs() import schedule 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') friends = schedule.get_jobs('friend') print(friends) """输出""" [Every 1 day do greet('Andrea') (last run: [never], next run: 2023-07-11 17:39:47) Every 1 hour do greet('John') (last run: [never], next run: 2023-07-10 18:39:47)]
-
取消
python# 取消所有任务:schedule.clear() import schedule def greet(name): print('Hello {}'.format(name)) if name == 'Cancel': schedule.clear('second-tasks') print('cancel second-tasks') schedule.every().second.do(greet, 'Andrea').tag('second-tasks', 'friend') schedule.every().second.do(greet, 'John').tag('second-tasks', 'friend') schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer') schedule.every(5).seconds.do(greet, 'Cancel').tag('daily-tasks', 'guest') while True: schedule.run_pending() """输出""" Hello Andrea Hello John Hello Andrea Hello John Hello Andrea Hello John Hello Andrea Hello John Hello Cancel cancel second-tasks
运行任务到某时间
-
until
pythonimport schedule from datetime import datetime, timedelta, time def job(): print('working...') schedule.every().second.until('23:59').do(job) # 今天23:59停止 schedule.every().second.until('2030-01-01 18:30').do(job) # 2030-01-01 18:30停止 schedule.every().second.until(timedelta(hours=8)).do(job) # 8小时后停止 schedule.every().second.until(time(23, 59, 59)).do(job) # 今天23:59:59停止 schedule.every().second.until(datetime(2030, 1, 1, 18, 30, 0)).do(job) # 2030-01-01 18:30停止 while True: schedule.run_pending()