[Tutor] Repeat function until...

Dave Angel davea at ieee.org
Wed Jun 23 16:34:12 CEST 2010

Steven D'Aprano wrote:
> On Wed, 23 Jun 2010 10:29:11 pm Nethirlon . wrote:
>> Hello everyone,
>> I'm new at programming with python and have a question about how I
>> can solve my problem the correct way. Please forgive my grammar,
>> English is not my primary language.
>> I'm looking for a way to repeat my function every 30 seconds.
> The easiest way is to just run forever, and stop when the user 
> interrupts it with ctrl-D (or ctrl-Z on Windows):
> # untested
> def call_again(n, func, *args):
>     """call func(*args) every n seconds until ctrl-D"""
>     import time
>     try:
>         while 1:
>             start = time.time()
>             func(*args)
>             time.sleep(n - (time.time()-start))
>     except KeyboardInterrupt:
>         pass
> Of course, that wastes a lot of time sleeping.
But "wasting time" was the stated goal.  If there's nothing else the 
application needs to do, sleep() is perfect.  I'm sure you know, but 
maybe some others don't:  sleep() uses essentially no CPU time, so the 
other applications on the system get all the performance.

> As an alternative, you need to look at threads. That's a big topic, you 
> probably need to read a How To or three on threads.
Only if there's other things that need doing in the same application.


More information about the Tutor mailing list