Guest User

Untitled

a guest
Dec 15th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. from threading import Thread, Event
  2. import time
  3.  
  4.  
  5. class Timer(Thread):
  6. """Call a function after a specified number of seconds:
  7.  
  8. t = Timer(30.0, f, args=None, kwargs=None)
  9. t.start()
  10. t.cancel() # stop the timer's action if it's still waiting
  11.  
  12. """
  13.  
  14. def __init__(self, internal, function, args=None, kwargs=None):
  15. Thread.__init__(self)
  16. self._internal = internal
  17. self._function = function
  18. self._args = args if args is not None else []
  19. self._kwargs = kwargs if kwargs is not None else {}
  20. self._finished = Event()
  21. self._reset = False
  22.  
  23. def cancel(self):
  24. """Stop the timer."""
  25. self._finished.set()
  26.  
  27. def reset(self):
  28. """Reset the timer"""
  29. self._reset = True
  30. self._finished.set()
  31.  
  32. def run(self):
  33. while True:
  34. self._finished.wait(self._internal)
  35. if not self._finished.is_set():
  36. self._function(*self._args, **self._kwargs)
  37. if self._reset:
  38. """Reset the timer"""
  39. self._reset = False
  40. self._finished.clear()
  41. continue
  42. return
  43.  
  44.  
  45. """Example"""
  46.  
  47.  
  48. def ping():
  49. print("ping, at " + str(time.time()))
  50.  
  51.  
  52. def main():
  53. timer = Timer(3.0, ping)
  54. print(time.time())
  55. timer.start()
  56. time.sleep(1.3)
  57. print(time.time())
  58. timer.reset()
  59.  
  60.  
  61. if __name__ == '__main__':
  62. main()
Add Comment
Please, Sign In to add comment