xiang8 发表于 2018-8-11 12:38:43

python 定时器

__author__ = 'root'  
import time
  
from CTimeHandle import CTimeHandle
  
class RepeatableTimer(object):
  

  
    def __init__(self, interval, function, args=[], kwargs={}):
  
      self.interval = interval
  
      self.function = function
  
      self.args = args
  
      self.kwargs = kwargs
  
      self.dayrun=False
  
      self.afterhour=0
  
      self.mytime = CTimeHandle()
  
      self.myday=-1
  

  
    def setDailyRum(self,afterhour=0):
  
      self.afterhour=afterhour
  
      self.dayrun=True
  

  
    def cancelDailyRun(self):
  
      self.dayrun=False
  

  
    def cheakDailyRun(self):
  
      now = self.mytime.updateNow()
  
      print now
  
      year,mon,day =self.mytime.GetDateinfo()
  
      hour,min,sec = self.mytime.GetTimeinfo()
  

  
      if self.myday == day:
  
            return False
  

  
      self.myday = day
  
      print "hour %s,afterhour %s,day %s,myday %s"%(hour,self.afterhour,day,self.myday)
  
      if int(hour) > self.afterhour:
  
            return True
  

  
      return False
  

  

  

  
    def start(self):
  
      self.stop()
  
      import threading
  
      self._timer = threading.Timer(self.interval, self._run)
  
      self._timer.setDaemon(True)
  
      self._timer.start()
  

  
    def restart(self):
  
      self.start()
  

  
    def stop(self):
  
      if self.__dict__.has_key("_timer"):
  
            self._timer.cancel()
  
            del self._timer
  

  
    def _run(self):
  
      try:
  
            if self.dayrun and False == self.cheakDailyRun():
  
               pass
  
            else:
  
                self.function(*self.args, **self.kwargs)
  
      except:
  
            pass
  
      self.restart()
  

  
def Myfun(*args,**kargs):
  
    print "Myfun run"
  
    value = kargs['key1']+kargs['key2']
  
    print value
  

  

  
if __name__=="__main__":
  
    hash={'key1':1,'key2':2}
  

  
    c = RepeatableTimer(2,Myfun,"",hash)
  
    c.setDailyRum(24)
  
    c.start()
  
    time.sleep(3000)
页: [1]
查看完整版本: python 定时器