Condition.wait(0.5) doesn't respect it's timeout

Piet van Oostrum piet at cs.uu.nl
Sun Apr 19 14:21:23 EDT 2009


>>>>> stephane.bisinger at gmail.com (sb) wrote:

>>> By the way, I wonder why you need a timeout in your wait. I think the
>>> notifications should be sufficient to keep the gui updated.

>sb> The reason is simple: when first downloading the contactss list,  I
>sb> receive a swarm of *Updated() calls, so if I redraw every time I get a
>sb> very bad visual effect and I waste a lot of CPU redrawing something
>sb> that will change in a very very short time. Hence the time
>sb> constraint... I couldn't come up with something smarter, so...

                while time.time() - t < 0.5 or not self._modified:
                    print >> sys.stderr, "Going to sleep\n"
                    self._mod_lock.wait(timeout=1)
                    print >> sys.stderr, "Ok time to see if we must repaint"
                self.__repaint()
                t = time.time()

But the timeout thing will continue after that, so you have a continuous
polling loop which wastes some CPU time. I think what you want can be
more easily achieved by doing a sleep(0.5) before the outer while loop,
i.e. as the first statement in __thread_run.
-- 
Piet van Oostrum <piet at cs.uu.nl>
URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4]
Private email: piet at vanoostrum.org



More information about the Python-list mailing list