|
__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)
|
|