[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.


DaveA


More information about the Tutor mailing list