Python中schedule模块关于定时任务使用方法

目录
  • 1 取消定时任务
  • 2 定时任务只执行一次
  • 3 获取所有的定时任务
  • 4 取消所有任务
  • 5 给定时任务打标签,同样通过标签获取或取消定时任务

1 取消定时任务

比如当满足一定条件时,就取消定时任务,在这种场景下,不可能说把进程干掉,所以可以利用取消定时任务的功能

如下代码,通过count控制当执行了5此以后,就取消定时任务

import schedule
import time
count=0
def do_func(name,age):
global count
count+=1
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
job=schedule.every(2).seconds.do(do_func,"张三丰",100)
while True:
if count>=5:
schedule.cancel_job(job)
schedule.run_pending()

if __name__=="__main__":
main()

执行结果如下,可以看到当执行完5此打印后,进程并没有退出,但是定时任务不再执行了

2022-05-25 00:03:15 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:03:17 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:03:19 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:03:21 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:03:23 in do func : 姓名:张三丰 年龄:100

2 定时任务只执行一次

定时任务执行一次似乎是没啥意义的,但是在某些场景下,比如执行了一定次数后,当满足一定条件时只需要再执行一次,这个时候就派上用场了

如下为单纯的只执行一次的定时任务

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))
return schedule.CancelJob
def main():
schedule.every(2).seconds.do(do_func,"张三丰",100)
while True:
schedule.run_pending()

if __name__=="__main__":
main()

执行结果如下,可以发现,执行完一次就不再执行了

2022-05-25 00:14:20 in do func : 姓名:张三丰 年龄:100

执行一次的定时任务的原理其实是在任务函数结尾返回了一个取消任务的消息,这里真正的价值在于将任务是否结束的决定权交给了任务函数,即可以在任务函数中进行条件判断,当达到一定的业务逻辑条件时,可以返回取消定时任务的消息,这样设置定时任务就更加灵活了

如下,可以在业务中判断是否具备停下来的条件,当条件满足了就停下来不再执行了

import schedule
import time
count=1
def do_func(name,age):
global count
count+=1
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))
if count >= 5:
print("已经执行5次了,达到预期结果了,不需要再执行了...")
return schedule.CancelJob

def main():
schedule.every(2).seconds.do(do_func,"张三丰",100)
while True:
schedule.run_pending()

if __name__=="__main__":
main()

执行结果如下:

2022-05-25 00:19:30 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:19:32 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:19:34 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:19:36 in do func : 姓名:张三丰 年龄:100

2022-05-25 00:19:38 in do func : 姓名:张三丰 年龄:100

已经执行5次了,达到预期结果了,不需要再执行了...

3 获取所有的定时任务

获取所有的定时任务作用就是可以根据一定的条件,对某些满足条件的定时任务进行各种操作如修改等

如下代码为对间隔3的任务从每3秒修改为每3分钟

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():
schedule.every(2).seconds.do(do_func,"张三丰",100)
schedule.every(3).seconds.do(do_func, "张三丰", 200)
all_jobs=schedule.get_jobs()
print("原始定时任务:")
for job in all_jobs:
print(job)
for job in all_jobs:
if job.interval ==3:
job.unit="minutes"
print("修改后的定时任务:")
for job in all_jobs:
print(job)
if __name__=="__main__":
main()

执行结果如下:

原始定时任务:

Job(interval=2, unit=seconds, do=do_func, args=('张三丰', 100), kwargs={})

Job(interval=3, unit=seconds, do=do_func, args=('张三丰', 200), kwargs={})

修改后的定时任务:

Job(interval=2, unit=seconds, do=do_func, args=('张三丰', 100), kwargs={})

Job(interval=3, unit=minutes, do=do_func, args=('张三丰', 200), kwargs={})

4 取消所有任务

如下为取消所有任务的代码,取消之前显示有两个任务,取消后显示有0个定时任务

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():
schedule.every(2).seconds.do(do_func,"张三丰",100)
schedule.every(3).seconds.do(do_func, "张三丰", 200)
print(len(schedule.get_jobs()))
schedule.clear()
print(len(schedule.get_jobs()))
if __name__=="__main__":
main()

执行结果为:

2

0

5 给定时任务打标签,同样通过标签获取或取消定时任务

如下代码演示了给任务打标签,根据标签挑选任务,根据标签清除任务等操作

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():
# 定义定时任务时直接打标签
schedule.every(2).seconds.do(do_func,"张三丰",100).tag("demo1","demo2")
schedule.every(3).seconds.do(do_func, "张三丰", 200).tag("demo2","demo3")
schedule.every(4).seconds.do(do_func, "张三丰", 300).tag("demo3", "demo4")
# 根据demo2标签选择任务
demo2=schedule.get_jobs("demo2")
print("根据demo2标签挑选出的任务")
for job in demo2:
print(job)
# 根据标签取消定时任务
schedule.clear("demo3")
all_job=schedule.get_jobs()
print("删除demo3标签的任务后,剩余的任务")
for job in all_job:
print(job)

if __name__=="__main__":
main()

执行结果如下:

根据demo2标签挑选出的任务

Job(interval=2, unit=seconds, do=do_func, args=('张三丰', 100), kwargs={})

Job(interval=3, unit=seconds, do=do_func, args=('张三丰', 200), kwargs={})

删除demo3标签的任务后,剩余的任务

Job(interval=2, unit=seconds, do=do_func, args=('张三丰', 100), kwargs={})

到此这篇关于Python中schedule模块关于定时任务使用方法的文章就介绍到这了,更多相关Python schedule 模块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用apscheduler模块设置定时任务的实现

    目录 一.安装 二.ApScheduler 简介 1 APScheduler的组件 2 调度器的种类 3 内置的触发器类型 三.使用举例 1 使用date类型的触发器 2 使用interval类型的触发器 3 使用cron类型的触发器 四.定时器使用装饰器的方法 一.安装 pip install apscheduler 二.ApScheduler 简介 1 APScheduler的组件 triggers:触发器triggers包含任务执行的调度逻辑,决定任务按照什么逻辑进行定时执行 job st

  • Python中schedule模块定时任务的使用方法(2)

    目录 1 设置时间间隔随机数 2 设置定时任务执行到指定时间 3 计算当前到下一次执行的时间差单位为秒 上一篇文章Python中schedule模块关于定时任务使用方法 1 设置时间间隔随机数 在有一些场景下,为了模拟比较自然的情景,需要采用随机的时间间隔,这就派上用场了 如下代码,设置随机间隔从2秒到10秒之间取随机数 import schedule import time def do_func(name,age): print(time.strftime('%Y-%m-%d %H:%M:%

  • Python3.6 Schedule模块定时任务(实例讲解)

    一,编程环境 PyCharm2016,Anaconda3 Python3.6 需要安装schedule模块,该模块网址:https://pypi.python.org/pypi/schedule 打开Anaconda Prompt,输入:conda install schedule 提示:Package Not Found Error 于是,使用 pip 安装.由于Anaconda3 中已经自带了pip,如下图: 于是 cmd 命令行切换到 scripts 目录,执行 pip.exe insta

  • python的schedule定时任务模块二次封装方法

    通过定时来执行任务,我们日常工作生活中会经常用到.python有schedule这个库,简单好用,比如,可以每秒,每分,每小时,每天,每天的某个时间点,间隔天数的某个时间点定时执行,另外自己又写了一个可以自定义时间点来定时执行任务,代码如下. import schedule import time class Timing(): #按秒循环定时执行任务 def doEverySecond(self,seconds,job_func): try: schedule.every(seconds).s

  • Python中schedule模块关于定时任务使用方法

    目录 1 取消定时任务 2 定时任务只执行一次 3 获取所有的定时任务 4 取消所有任务 5 给定时任务打标签,同样通过标签获取或取消定时任务 1 取消定时任务 比如当满足一定条件时,就取消定时任务,在这种场景下,不可能说把进程干掉,所以可以利用取消定时任务的功能 如下代码,通过count控制当执行了5此以后,就取消定时任务 import schedule import time count=0 def do_func(name,age): global count count+=1 print

  • python中wx模块的具体使用方法

    wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的. 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地址:http://www.wxpython.org/download.php 根据自己的操作系统下载相应版本. 安装: 安装过程非常简单,以win7系统为例,点击下载的exe 文件,保持安装目录与本机的python目录一致就OK了. 创建并显示一个框架 import wx # 需要导入wx模块 ap

  • python中添加模块导入路径的方法

    python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append()随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import sys sys.path.append('自定义路径') (2)加入到环境变量PYTHONPATH用于当前用户 在用户主目录下有一个 .bashrc 隐藏文件,打开文件 sudo vim ~/.bashrc 添加单个路径的方法 export PYTHONPATH=<自定义路径>:$PYTHONPA

  • Python中optionParser模块的使用方法实例教程

    本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: from optparse impo

  • python中requests模块的使用方法

    本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合性的功能.相比于urllib2,Kenneth Reitz的Requests模块更能简约的支持完整的简单用例. 简单的例子: 想象下我们试图使用get方法从http://example.test/获取资源并且查看返回代码,content-type头信息,还有response的主体内容.这件事无论使用

  • python中struct模块之字节型数据的处理方法

    简介 这个模块处理python中常见类型数据和Python bytes之间转换.这可用于处理存储在文件或网络连接中的bytes数据以及其他来源.在python中没有专门处理字节的数据类型,建立字节型数据也比较麻烦,我们知道的bytes()函数也只能对无符号整型做处理,并且数据如下(没错,数字为多少就有多少个\x00,我们要是用这种方式来存储大量数据,结果可想而知): va = bytes(1) # va: '\x00' vb = bytes(2) # vb: '\x00\x00' vc = by

  • Python中pandas模块DataFrame创建方法示例

    本文实例讲述了Python中pandas模块DataFrame创建方法.分享给大家供大家参考,具体如下: DataFrame创建 1. 通过列表创建DataFrame 2. 通过字典创建DataFrame 3. 通过Numpy数组创建DataFrame DataFrame这种列表式的数据结构和Excel工作表非常类似,其设计初衷是讲Series的使用场景由一维扩展到多维. DataFrame由按一定顺序的多列数据组成,各列的数据类型可以有所不同(数值.字符串.布尔值). Series对象的Ind

  • 详解Python中Addict模块的使用方法

    目录 介绍 1.安装 2.用法 3.要牢记的事情 4.属性,如键.item等 5.默认值 6.转化为普通字典 7.计数 8.更新 9.Addict 是怎么来的 介绍 Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置. 这意味着你不用再写这样的字典了: body = {     'query': {         'filtered': {             'query': {              

  • python中elasticsearch_dsl模块的使用方法

    目录 前言 连接elasticsearch elasticsearch_dsl.Search query方法 filter方法 index方法 elasticsearch_dsl.query elasticsearch_dsl.Q 嵌套类型 查询 排序 分页 聚合 高亮显示 source限制返回字段 删除 案例分析 前言 elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法. 安装: install elastic

随机推荐