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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章