65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
|
"""
|
||
|
SleekXMPP: The Sleek XMPP Library
|
||
|
Implementation of xeps for Internet of Things
|
||
|
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||
|
Copyright (C) 2013 Sustainable Innovation, Joachim.lindborg@sust.se, bjorn.westrom@consoden.se
|
||
|
This file is part of SleekXMPP.
|
||
|
|
||
|
See the file LICENSE for copying permission.
|
||
|
"""
|
||
|
from threading import Thread, Event, Timer
|
||
|
import time
|
||
|
|
||
|
def TimerReset(*args, **kwargs):
|
||
|
""" Global function for Timer """
|
||
|
return _TimerReset(*args, **kwargs)
|
||
|
|
||
|
|
||
|
class _TimerReset(Thread):
|
||
|
"""Call a function after a specified number of seconds:
|
||
|
|
||
|
t = TimerReset(30.0, f, args=[], kwargs={})
|
||
|
t.start()
|
||
|
t.cancel() # stop the timer's action if it's still waiting
|
||
|
"""
|
||
|
|
||
|
def __init__(self, interval, function, args=[], kwargs={}):
|
||
|
Thread.__init__(self)
|
||
|
self.interval = interval
|
||
|
self.function = function
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
self.finished = Event()
|
||
|
self.resetted = True
|
||
|
|
||
|
def cancel(self):
|
||
|
"""Stop the timer if it hasn't finished yet"""
|
||
|
self.finished.set()
|
||
|
|
||
|
def run(self):
|
||
|
#print "Time: %s - timer running..." % time.asctime()
|
||
|
|
||
|
while self.resetted:
|
||
|
#print "Time: %s - timer waiting for timeout in %.2f..." % (time.asctime(), self.interval)
|
||
|
self.resetted = False
|
||
|
self.finished.wait(self.interval)
|
||
|
|
||
|
if not self.finished.isSet():
|
||
|
self.function(*self.args, **self.kwargs)
|
||
|
self.finished.set()
|
||
|
#print "Time: %s - timer finished!" % time.asctime()
|
||
|
|
||
|
def reset(self, interval=None):
|
||
|
""" Reset the timer """
|
||
|
|
||
|
if interval:
|
||
|
#print "Time: %s - timer resetting to %.2f..." % (time.asctime(), interval)
|
||
|
self.interval = interval
|
||
|
else:
|
||
|
#print "Time: %s - timer resetting..." % time.asctime()
|
||
|
pass
|
||
|
|
||
|
self.resetted = True
|
||
|
self.finished.set()
|
||
|
self.finished.clear()
|