How to execute a function asynchronously every 60 seconds in Python? How to execute a function asynchronously every 60 seconds in Python? python python

How to execute a function asynchronously every 60 seconds in Python?


You could try the threading.Timer class: http://docs.python.org/library/threading.html#timer-objects.

import threadingdef f(f_stop):    # do something here ...    if not f_stop.is_set():        # call f() again in 60 seconds        threading.Timer(60, f, [f_stop]).start()f_stop = threading.Event()# start calling f now and every 60 sec thereafterf(f_stop)# stop the thread when needed#f_stop.set()


The simplest way is to create a background thread that runs something every 60 seconds. A trivial implementation is:

class BackgroundTimer(Thread):      def run(self):      while 1:        Time.sleep(60)        # do something# ... SNIP ...# Inside your main thread# ... SNIP ...timer = BackgroundTimer()timer.start()

Obviously, this if the "do something" takes a long time, you'll need to accommodate for it in your sleep statement. But this serves as a good approximation.


I googled around and found the Python circuits Framework, which makes it possible to wait
for a particular event.

The .callEvent(self, event, *channels) method of circuits contains a fire and suspend-until-response functionality, the documentation says:

Fire the given event to the specified channels and suspend execution until it has been dispatched. This method may only be invoked as argument to a yield on the top execution level of a handler (e.g. "yield self.callEvent(event)"). It effectively creates and returns a generator that will be invoked by the main loop until the event has been dispatched (see :func:circuits.core.handlers.handler).

I hope you find it as useful as I do :)
./regards