Skip to content

Instantly share code, notes, and snippets.

@bbengfort
Last active July 7, 2023 04:33
Show Gist options
  • Save bbengfort/a7d46013f39cf367daa5 to your computer and use it in GitHub Desktop.
Save bbengfort/a7d46013f39cf367daa5 to your computer and use it in GitHub Desktop.
Run a function every n seconds using Python threading.
from threading import Timer
from functools import partial
class Interval(object):
def __init__(self, interval, function, args=[], kwargs={}):
"""
Runs the function at a specified interval with given arguments.
"""
self.interval = interval
self.function = partial(function, *args, **kwargs)
self.running = False
self._timer = None
def __call__(self):
"""
Handler function for calling the partial and continuting.
"""
self.running = False # mark not running
self.start() # reset the timer for the next go
self.function() # call the partial function
def start(self):
"""
Starts the interval and lets it run.
"""
if self.running:
# Don't start if we're running!
return
# Create the timer object, start and set state.
self._timer = Timer(self.interval, self)
self._timer.start()
self.running = True
def stop(self):
"""
Cancel the interval (no more function calls).
"""
if self._timer:
self._timer.cancel()
self.running = False
self._timer = None
if __name__ == "__main__":
import time
import random
def clock(start):
"""
Prints out the elapsed time when called from start.
"""
print "elapsed: {:0.3f} seconds".format(
time.time() - start
)
# Create an interval.
interval = Interval(random.randint(1,3), clock, args=[time.time(),])
print "Starting Interval, press CTRL+C to stop."
interval.start()
while True:
try:
time.sleep(0.1)
except KeyboardInterrupt:
print "Shutting down interval ..."
interval.stop()
break
@bbengfort
Copy link
Author

@ant358 glad it was able to help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment