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的turtle模块画图的方法
Nov 15 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
Django中的Signal代码详解
Feb 05 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
python中sys.argv函数精简概括
Jul 08 Python
设置python3为默认python的方法
Oct 31 Python
wxpython布局的实现方法
Nov 01 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
5款实用的python 工具推荐
Oct 13 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
javascript折半查找详解
2015/01/26 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
python缩进区别分析
2014/02/15 Python
python基于右递归解决八皇后问题的方法
2015/05/25 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python三引号如何输入
2020/07/06 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
《我要的是葫芦》教学反思
2016/02/18 职场文书
入党申请书怎么写?
2019/06/21 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python