Recursing for Progress Bar

Ben Finney bignose+hates-spam at benfinney.id.au
Mon Sep 18 23:11:47 EDT 2006


"half.italian at gmail.com" <half.italian at gmail.com> writes:

> Is there a way to get around recursion limits?  Help!
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>       def incrementProgress(self, window, workorder):
>               #...
> 		time.sleep(.1)
> 		self.incrementProgress(window, workorder)

You don't show a complete working example, so it's hard to know the
context of this.

What is the purpose of this function? Why is it performing these last
two lines at all?

Surely this function should be called by an *external* loop of the
actual processing, with no recursion, and no enforced delay.

    import time

    class ProgressBar(object):
        """ Display of progress as a horizontal bar """

        update_frequency = 0.1

        def __init__(self, window):
            self.window = window
            self._prev_increment_time = 0

        def increment(self, workorder):
            """ Increment the progress display """
            # ... code to unconditionally update the display
            self._prev_update_time = time.time()

        def update(self, workorder):
            """ Update the progress if necessary """
            time_since_update = time.time() - self._prev_update_time
            if time_since_update >= self.update_frequency:
                self.increment(workorder)

    window = however_you_make_a_window()
    bar = ProgressBar(window)

    for foo in iterator_of_foos:
        workorder = do_the_processing(foo)
        bar.update(workorder)

-- 
 \     "Buy not what you want, but what you need; what you do not need |
  `\           is expensive at a penny."  -- Cato, 234-149 BC, Relique |
_o__)                                                                  |
Ben Finney




More information about the Python-list mailing list