diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2001-09-05 13:44:54 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2001-09-05 13:44:54 (GMT) |
commit | 44f8696171f8d9e29c82e250ed90351dfb207da2 (patch) | |
tree | f36e0a0410aae536bd757773a8c684e48563781b /Lib/threading.py | |
parent | b3a639ed7d53ab49eae174c5605d0861c56489f3 (diff) | |
download | cpython-44f8696171f8d9e29c82e250ed90351dfb207da2.zip cpython-44f8696171f8d9e29c82e250ed90351dfb207da2.tar.gz cpython-44f8696171f8d9e29c82e250ed90351dfb207da2.tar.bz2 |
Patch #428326: New class threading.Timer.
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index 268c09c..4906674 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -331,7 +331,6 @@ class _Event(_Verbose): self.__cond.wait(timeout) self.__cond.release() - # Helper to generate new thread names _counter = 0 def _newname(template="Thread-%d"): @@ -483,6 +482,36 @@ class Thread(_Verbose): assert not self.__started, "cannot set daemon status of active thread" self.__daemonic = daemonic +# The timer class was contributed by Itamar Shtull-Trauring + +def Timer(*args, **kwargs): + return _Timer(*args, **kwargs) + +class _Timer(Thread): + """Call a function after a specified number of seconds: + + t = Timer(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() + + def cancel(self): + """Stop the timer if it hasn't finished yet""" + self.finished.set() + + def run(self): + self.finished.wait(self.interval) + if not self.finished.isSet(): + self.function(*self.args, **self.kwargs) + self.finished.set() # Special thread class to represent the main thread # This is garbage collected through an exit handler |