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抓取淘宝下拉框关键词的方法
Jul 08 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
python代理工具mitmproxy使用指南
Jul 04 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 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对象在内存中的存在形式分析
2015/02/03 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
PHP 断点续传实例详解
2017/11/11 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
Python 自动补全(vim)
2014/11/30 Python
python实用代码片段收集贴
2015/06/03 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
详解python 内存优化
2020/08/17 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
采购员的工作职责
2013/12/26 职场文书
心理健康心得体会
2014/01/02 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
就业协议书怎么填
2014/09/15 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
2014年质检工作总结
2014/11/26 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书