schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。
        如果想执行多个任务,也可以添加多个task。

首先安装schedule库:

pip install schedule

1、按时间间隔执行定时任务

示例代码1:

import schedule
from datetime import datetimedef task():now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts)def task2():now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + '666!')def func():# 清空任务schedule.clear()# 创建一个按3秒间隔执行任务schedule.every(3).seconds.do(task)# 创建一个按2秒间隔执行任务schedule.every(2).seconds.do(task2)while True:schedule.run_pending()func()

运行结果:

示例代码2:

import schedule
import timedef job(name):print("her name is : ", name)name = "张三"
schedule.every(10).minutes.do(job, name)
schedule.every().hour.do(job, name)
schedule.every().day.at("10:30").do(job, name)
schedule.every(5).to(10).days.do(job, name)
schedule.every().monday.do(job, name)
schedule.every().wednesday.at("13:15").do(job, name)while True:schedule.run_pending()time.sleep(1)

参数解释:

  • 每隔十分钟执行一次任务
  • 每隔一小时执行一次任务
  • 每天的10:30执行一次任务
  • 每隔5到10天执行一次任务
  • 每周一的这个时候执行一次任务
  • 每周三13:15执行一次任务
  • run_pending:运行所有可以运行的任务

 注意:schedule方法是串行的,也就是说,如果各个任务之间时间不冲突,那是没问题的;如果时间有冲突的话,会串行的执行命令。

2、装饰器:通过 @repeat() 装饰静态方法

示例代码:

from datetime import datetime
from schedule import every, repeat, run_pending@repeat(every(3).seconds)
def task():now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + '-333!')@repeat(every(5).seconds)
def task2():now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + "-555555!")while True:run_pending()

运行结果:

3、传递参数

示例代码:

from datetime import datetime
import scheduledef task(s):now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + s)def task2(s):now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + s)schedule.every(3).seconds.do(task, s='-333')
schedule.every(5).seconds.do(task, s='-555')
while True:schedule.run_pending()

运行结果:

4、使用装饰器传递参数

示例代码:

from datetime import datetime
from schedule import every, repeat, run_pending@repeat(every(3).seconds, '-333')
def task(s):now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + s)@repeat(every(5).seconds, '-555')
def task2(s):now = datetime.now()ts = now.strftime("%Y-%m-%d %H:%M:%S")print(ts + s)while True:run_pending()

运行结果:

5、取消定时任务

示例代码:

import schedulei = 0def some_task():global ii += 1print(i)if i == 5:schedule.cancel_job(job)print('cancel job')exit(0)job = schedule.every().second.do(some_task)
while True:schedule.run_pending()

运行结果:

6、在指定时间执行一次任务

示例代码:

import time
import scheduledef job_that_executes_once():print('Hello')return schedule.CancelJobschedule.every().minute.at(':30').do(job_that_executes_once)
while True:schedule.run_pending()time.sleep(1)

运行结果:

7、根据标签检索任务

示例代码:

# 检索所有任务:schedule.get_jobs()
import scheduledef 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)

运行结果:

8、根据标签取消任务

示例代码:

# 取消所有任务:schedule.clear()
import scheduledef 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()

运行结果:

9、运行任务到某时间

示例代码:

import schedule
from datetime import datetime, timedelta, timedef 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()

运行结果:

10、马上运行所有任务(主要用于测试)

示例代码:

import scheduledef job():print('working...')def job1():print('Hello...')schedule.every().monday.at('12:40').do(job)
schedule.every().tuesday.at('16:40').do(job1)
schedule.run_all()
schedule.run_all(delay_seconds=3)  # 任务间延迟3秒

运行结果:

11、并行运行:使用 Python 内置队列实现

示例代码:

import threading
import time
import scheduledef job1():print("I'm running on thread %s" % threading.current_thread())def job2():print("I'm running on thread %s" % threading.current_thread())def job3():print("I'm running on thread %s" % threading.current_thread())def run_threaded(job_func):job_thread = threading.Thread(target=job_func)job_thread.start()schedule.every(10).seconds.do(run_threaded, job1)
schedule.every(10).seconds.do(run_threaded, job2)
schedule.every(10).seconds.do(run_threaded, job3)
while True:schedule.run_pending()time.sleep(1)

运行结果:

python中定时任务schedule库用法详解相关推荐

  1. python中调试pdb库用法详解

    pdb是ptyhon内置的一个调试库,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等. 实际工作过程中 ...

  2. Python中数组切片的用法详解

    Python中数组切片的用法详解 一.python中"::-1"代表什么? 二.python中":"的用法 三.python中数组切片 三.numpy中的整数数 ...

  3. python中split()函数的用法详解

    一.split()函数的简单应用 1.split()函数 split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串.它是按指定的分隔符,把一个字符串分 ...

  4. python中f字符串f-string用法详解

    一.f-string字符串用法 1.f字符串用法 f-string: formatted string literals, 格式化字符串常量. 格式化 {} 内容,不在 {} 内的照常展示输出,如果你 ...

  5. Python BS4解析库用法详解

    Python BS4解析库用法详解 Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据.Bea ...

  6. python中如何反解函数_PyTorch中反卷积的用法详解

    pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d(in_channels, out_channels, kernel_size, str ...

  7. python search用法,Python-re中search()函数的用法详解(查找ip)

    1.首先来看一下search()和find()的区别 import re s1 = "2221155" #search 字符串第一次出现的位置 print(re.search(&q ...

  8. python explode_pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...

  9. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

最新文章

  1. 域名解析和cdn 原理
  2. 浅谈C中的指针和数组(一)
  3. python3模块文档_Python3模块-Python入门到精通
  4. 编程中python怎么读-Python编程怎么学习好?老男孩Python入门
  5. java c语言 for_Java能写C语言编译器吗
  6. 实验二+018+李滨
  7. 认识Hibernate
  8. nosql数据库之Redis概念及基本操作
  9. Template Method (模板方法模式)
  10. win10任务栏怎么还原到下面_如何让你的Win10桌面变得更好看?
  11. 随机存取存储器(RAM)的最大特点是什么?
  12. 刘未鹏:怎样花两年时间去面试一个人
  13. SOF-SLAM:一种面向动态环境的语义视觉SLAM(2019,JCR Q1, 4.076)
  14. 研究揭示人类大脑进化的基因组调控机制
  15. springboot配置druid内置监控页面
  16. 《知识就是力量》第二期——“怎样做一个更有价值的人”笔记
  17. pytorch矩阵运算
  18. “全栈2019”Java第十三章:基本数据类型
  19. opencv手写数字识别(未完待续...)
  20. 华软java综合实验二_华软-企业级javaII(第一次作业)

热门文章

  1. swf/AS2.0/AS3.0/fla/ppt课件如何转化为跨平台HTML5交互课件/动画?
  2. Yii框架实现伪静态
  3. Docker安装Elasticsearch【单机】
  4. SQL insert into 语句的写法
  5. 微信小程序----动态
  6. jQuery效果之滑动退出滑动显示 slideUp、slideDown
  7. 新三板所有问题汇总(拟挂牌公司篇)
  8. 佳能5d3右下角红灯一直闪_佳能相机红灯一直闪怎么回事 佳能相机为什么黑屏【详解】...
  9. jMeter-用户自定义的变量(UDV)
  10. 计算机及应用的课程论文,机器学习课程论文计算机软件及应用it计算机专业资料.doc...