python 定时器

在工作中,我们有时候会需要定时去做一些操作,比如凌晨更新远程代码,仓库每小时更新一次远程分支。这些操作,我们如果要人工进行,不仅要耗费精力,也更容易出错。

如果一件事情,具有周期操作的特点,那么把这件事情设置为定时器操作,最合适不过。

在不借助第三方插件的情况下,python内部可以有多种方式完成定时器操作,这里介绍一种简单易行的方法:

利用threading.Timer方法创建一个定时器。

一个简单的需求,程序启动5s后在屏幕上打印一个hello

首先介绍一下threading.Timer的使用方法:

class threading.Timer(interval, function, args=[], kwargs={})

创建一个timer,在interval秒过去之后,它将以参数args和关键字参数kwargs运行function 。

调用该函数回返回一个定时器的句柄,同时也获得了一个定时器实例。

但是这时,定时器只是被创建,被没有启动,需要调用实例里面的

start()方法启动定时器。如果在定时过程中想要取消该定时器,需要使用cancel()函数。

那么这个小需求,就很简单了,代码可以这么写:

定义一个定时时间到了,需要调用的函数,方便Timer函数回调,创建定时器实例,并设置定时时间,或得实例后,启动定时器。

但是我们发现,定时器只执行了一次,如何要定时器,能够不停的执行下去呢?

一种方法是利用while(True),不停的创建定时器并启动,显然这种方法显得笨拙,而且会一直占用线程。

另外一种方法,就是在回调函数中,创建定时器并启动,形成递归调用。这里着重说下这种方法。

运行效果如下:

程序看起来很简单,通过在回调函数里面,重新创建定时器,来使得定时器能够一直工作。

但是值得注意的是,定时器的句柄需要定义成为一个全局变量,这样做的好处是,创建的定时器进程和实例不会堆积,而是覆盖,避免不必要的内存占用。

另外利用threading创建的定时器还有一个好处是,每一个定时器的创建都是在一个新的进程里面,所以定时器是不阻塞式的,比如,我们创建两个定时器,让它们分别打印不同的字符串:

我们运行程序可以看到:

这样一个简单的定时器就完成了!

但是这并不是一个十分健壮的定时器,还有很多问题需要考虑,比如,如何终止定时器?在何时使用cancel()?如果创建定时器实例失败,应该如何处理?等等。

不过一个定时器的基本雏形已经完成了,剩下的就是根据需要添加不同的功能。

python定时器启动多次_python 定时器相关推荐

  1. python 每天执行一次_python 定时器每天就执行一次的实现代码

    1.实现功能 编写python脚本一直运行,判断当下是否是新的一天,如果是就执行一次任务代码 2.具体实现代码 #-*-coding:utf-8 -*- __author__ = 'Administr ...

  2. python线程池原理_Python定时器线程池原理详解

    这篇文章主要介绍了Python定时器线程池原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定时器执行循环任务: 知识储备 Timer(int ...

  3. python每天定时9点执行_python定时器每天订时执行的实例方法

    python定时器,实现每天凌晨3点执行的方法 如下所示: ''' Created on 2018-4-20 例子:每天凌晨3点执行func方法 ''' import datetime import ...

  4. python 定时器_Python 定时器

    在编写服务进程的时候,往往需要定时落地一些数据,这就需要定时来执行一些操作,然后python中并没有合适的定时器(我没有找到),就自己diy吧. import threading,time class ...

  5. 无所不能的Python竟然没有一个像样的定时器?试试这个!

    所谓定时器,是指间隔特定时间执行特定任务的机制.几乎所有的编程语言,都有定时器的实现.比如,Java有util.Timer和util.TimerTask,JavaScript有setInterval和 ...

  6. python 关闭 定时开启_Qt多种定时器

    介绍Qt的三种定时器QObject内置定时器,QBasicTimer,QTimer. QObject内部定时器 使用startTimer开启定时器,使用killTimer(int id)接口来关闭指定 ...

  7. Js、jquery 定时器启动与停止效果实现

    项目背景: 大二上学期复习完jquery后的国庆作业 使用jquery百分百完成以下网址轮播图效果 完成效果需求: 一,轮播图每3秒自动切换下一个图片,同时图片对应的选项样式会改变为红色选中状态 二, ...

  8. Android设置多个定时器时只有最后一个定时器有效的问题

    AlarmManager的常用方法有三个: (1)set(int type,long startTime,PendingIntent pi):         该方法用于设置一次性闹钟,第一个参数表示 ...

  9. python不同数据的读入_python读写不同编码txt文件_python读写txt文件

    python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenames=os. ...

  10. linux定时器错误使用,linux下定时器的使用

    Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...

最新文章

  1. 企业网络推广方案教大家在更换服务器时降低排名影响的技巧!
  2. 设置 Confluence 6 日志
  3. Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)
  4. UNITY 打APK是如何确定哪些资源有用哪些无用的
  5. 将jOOQ与Spring结合使用:代码生成
  6. hdu1247(Hat’s Words)
  7. 前端学习(2691):重读vue电商网站12之获取选中节点的keys:
  8. Python——Django框架——django-simple-captcha(验证码)
  9. mongodb转实体对像_MongoDB:实体对象(javabean)转DBObject
  10. 《HTML5实战》——A.2 常见的HTML5规范
  11. 查找你的幸运守护精灵
  12. 信息系统项目管理--论文分析笔记
  13. android chrome 无法下载,Android Chrome浏览器将支持下载暂停和取消
  14. SQLMAP简易使用教程
  15. 官方太空射击游戏总结
  16. DOJP1520星门跳跃题解
  17. VIII openstack(2)
  18. layui框架学习(4:导航)
  19. [k8s]一步一步学习k8syaml
  20. 丢人了,我都不知道4D啊

热门文章

  1. 9门主流编程语言---详细对比
  2. 微信小程序页面实现防抖
  3. Ubuntu18.04创建快捷方式
  4. Java web前端——HTML常用标签
  5. 后深度学习的挑战与思考(PRCV 焦李成 报告记录)
  6. NOI2014起床困难综合症
  7. C语言实现循环缓冲fifo及总结
  8. 影视剪辑,剪了这么久视频,还不知道pr剪辑的这些快捷键
  9. matlab如何选局部最大值,如何在MATLAB中的图像中找到局部最大值?
  10. html table 斜线表头,Table表格加斜线表头