Python 实现某个功能每隔一段时间被执行一次的功能方法


Posted in Python onOctober 14, 2018

本人在做项目的时候遇到一个问题:

某个函数需要在每个小时的 3 分钟时候被执行一次,我希望我 15:45 启动程序,过了18 分钟在 16:03 这个函数被执行一次,下一次过 60 分钟在 17:03 再次被执行,下一次 18:03,以此类推。

以下是我基于 Timer 做的再封装实现了此功能。

# -*- coding: utf-8 -*-
# ==================================================
# 对 Timer 做以下再封装的目的是:当某个功能需要每隔一段时间被
# 执行一次的时候,不需要在回调函数里对 Timer 做重新安装启动
# ==================================================
__author__ = 'liujiaxing'

from threading import Timer
from datetime import datetime

class MyTimer( object ):

 def __init__( self, start_time, interval, callback_proc, args=None, kwargs=None ):

  self.__timer = None
  self.__start_time = start_time
  self.__interval = interval
  self.__callback_pro = callback_proc
  self.__args = args if args is not None else []
  self.__kwargs = kwargs if kwargs is not None else {}

 def exec_callback( self, args=None, kwargs=None ):
  self.__callback_pro( *self.__args, **self.__kwargs )
  self.__timer = Timer( self.__interval, self.exec_callback )
  self.__timer.start()

 def start( self ):
  interval = self.__interval - ( datetime.now().timestamp() - self.__start_time.timestamp() )
  print( interval )
  self.__timer = Timer( interval, self.exec_callback )
  self.__timer.start()

 def cancel( self ):
  self.__timer.cancel() 
  self.__timer = None

class AA:
 def hello( self, name, age ):
  print( "[%s]\thello %s: %d\n" % ( datetime.now().strftime("%Y%m%d %H:%M:%S"), name, age ) )

if __name__ == "__main__":

 aa = AA()
 start = datetime.now().replace( minute=3, second=0, microsecond=0 )
 tmr = MyTimer( start, 60*60, aa.hello, [ "owenliu", 18 ] )
 tmr.start()
 tmr.cancel()

以上这篇Python 实现某个功能每隔一段时间被执行一次的功能方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的多重装饰器
Apr 11 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
python实现百度语音识别api
Apr 10 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
Python 合并拼接字符串的方法
Jul 28 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 Python
Python 实现异步调用函数的示例讲解
Oct 14 #Python
python 异或加密字符串的实例
Oct 14 #Python
python实现换位加密算法的示例
Oct 14 #Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 #Python
Python中实例化class的执行顺序示例详解
Oct 14 #Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 #Python
对python3中pathlib库的Path类的使用详解
Oct 14 #Python
You might like
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
php-app开发接口加密详解
2018/04/18 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python生成指定长度的随机数密码
2014/01/23 Python
python搜索指定目录的方法
2015/04/29 Python
python的mysqldb安装步骤详解
2017/08/14 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
大学生两会学习心得体会
2014/03/10 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2014年保育员工作总结
2014/12/02 职场文书
幼师个人总结范文
2015/02/28 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2016年员工年度考核评语
2015/12/02 职场文书