利用Python实现定时程序的方法

 更新时间:2021年07月06日 08:36:18   作者:Lavender1  
在 Python 中,如何定义一个定时器函数呢?本文主要介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

定时器概念

什么是定时器呢?它是指从指定的时刻开始,经过一个指定时间,然后触发一个事件,用户可以自定义定时器的周期与频率。

实现一个简单的定时程序

方案一

在 Python 中,如何定义一个定时器函数呢?我们先看第一种方法。假设我们需要执行一个函数userCountFunc,这个函数需要每隔一个小时被执行一次。那么,我们可以这样写:

def main():
    startCronTask(userCountFunc, minutes=60)

if __name__ == '__main__':
    main()

如上面的代码,我们在定义了一个 main 函数后,便定义了一个定时函数 startCronTask。第一个参数为函数名,第二个参数为时间,第二个参数表示多长时间后调用后面第一个参数的函数。第一个参数注意是函数对象,进行参数传递,用函数名(如 userCountFunc)表示该对象,不是函数执行语句 userCountFunc(),不然会报错。那么,在实现这个函数时,需要引入定时功能,Python 中有一个定时任务模块 BlockingScheduler:

from apscheduler.schedulers.blocking import BlockingScheduler

def startCronTask(task, **config):
    # BlockingScheduler
    scheduler = BlockingScheduler()
    scheduler.add_job(task, 'interval', **config)
    scheduler.start()

定义完一个调度模块之后,实际的定时调度功能就完成了。接下来,需要具体实现定时执行的逻辑函数 userCountFunc:

def userCountFunc():
    logger.info('count user')
    ...

这样,对于方案一,实现的简单的定时功能就完成了。

方案二

方案一中介绍的是 Python 自带的 BlockingScheduler 模块,Python 中除了可以通过 BlockingScheduler,还通过线程实现定时器 timer,来简单的看下代码:

import threading

def timerFunc():
    print('Hello World~')

timer = threading.Timer(1, timerFunc)
timer.start()

在上面的代码中,定时器函数 threading.Timer 主要有2个参数,参数意义与方案一类似,接下来执行这段程序:

Hello World~
      
Process finished with exit code 0

我们发现只执行一遍,程序就结束了,但显然不是我们想要的结果。其实,我们看下 Time 类,有这样的一句解释性注释:Call a function after a specified number of seconds,我们发现上面在执行后并未循环执行,所以需要修改下:

import threading

def timerFunc():
    print('Hello World~')
    global timer
    timer = threading.Timer(10.5, timerFunc)
    timer.start()

timer = threading.Timer(3, timerFunc)
timer.start()

此时,我们可以看到输出结果:

Hello World~

Hello World~

Hello World~
...

这里需要注意的是:必须在定时器执行函数内部重复构造定时器,因为定时器构造后只执行1次,必须循环调用。

另外,在上面的代码中,我们其实还可以看到:threading.Timer(5.5, timerFunc),定时器间隔单位是秒,可以是浮点数,如5.5,0.9等,在执行函数 timerFunc 内部和外部中给的值可以不同。如上例中第一次执行 timerFunc 是3秒后,后面的都是10.5秒后执行。

接下来,我们再看看如何再一定时间结束定时功能。我们可以使用cancel停止定时器的工作,如下例:

import threading

def timerFunc():
    print('Hello World~')
    global timer
    timer = threading.Timer(10.5, timerFunc)
    timer.start()

timer = threading.Timer(3, timerFunc)
timer.start()

time.sleep(60)
timer.cancel()

上面的代码表示:在定时器按照一定时间执行后,执行过程耗时60秒后停止定时操作功能,退出。显示结果为:

Hello World~

Hello World~

Hello World~

Hello World~

Hello World~
...

Process finished with exit code 0

到此这篇关于利用Python实现定时程序的方法的文章就介绍到这了,更多相关Python 定时程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于pytorch的RNN实现字符级姓氏文本分类的示例代码

    基于pytorch的RNN实现字符级姓氏文本分类的示例代码

    当使用基于PyTorch的RNN实现字符级姓氏文本分类时,我们可以使用一个非常简单的RNN模型来处理输入的字符序列,并将其应用于姓氏分类任务,本文给大家举了一个基本的示例代码,需要的朋友可以参考下
    2023-12-12
  • Python中staticmethod和classmethod的作用与区别

    Python中staticmethod和classmethod的作用与区别

    今天小编就为大家分享一篇关于Python中staticmethod和classmethod的作用与区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • python的pip有什么用

    python的pip有什么用

    在本篇文章里小编给大家整理的是关于python的pip作用等相关内容,有需要的朋友们可以学习下。
    2020-06-06
  • 解决Python print 输出文本显示 gbk 编码错误问题

    解决Python print 输出文本显示 gbk 编码错误问题

    这篇文章主要介绍了解决Python print 输出文本显示 gbk 编码错误问题,本文给出了三种解决方法,需要的朋友可以参考下
    2018-07-07
  • Python3.8中使用f-strings调试

    Python3.8中使用f-strings调试

    这篇文章主要介绍了Python3.8中使用f-strings调试的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 用Python实现大文本文件切割的方法

    用Python实现大文本文件切割的方法

    今天小编就为大家分享一篇用Python实现大文本文件切割的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 基于Python实现万年历制作

    基于Python实现万年历制作

    制作一个万年历是一个有趣的Python项目,它可以让您查看任何年份的日历并获得特定日期的信息,下面我们就来看看具体是如何使用Python实现的吧
    2023-12-12
  • python读取多类型文件夹中的文档内容

    python读取多类型文件夹中的文档内容

    无论我们使用哪种编程语言,处理文件对于每个程序员都是必不可少的,本文主要介绍了python读取多类型文件夹中的文档内容,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • python批量同步web服务器代码核心程序

    python批量同步web服务器代码核心程序

    这篇文章主要介绍了python批量同步web服务器代码核心程序,需要的朋友可以参考下
    2014-09-09
  • Python字符串对象实现原理详解

    Python字符串对象实现原理详解

    这篇文章主要介绍了Python字符串对象实现原理详解,在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,需要的朋友可以参考下
    2019-07-07

最新评论