progress icon indicating copy to clipboard operation
progress copied to clipboard

Idea to expose duration of a progress/infinite as a feature

Open danizen opened this issue 3 years ago • 1 comments

I noticed in much of the code where I use progress, I also give some feedback about throughput and duration. I tried to recode this so that I was delegating this to the Progress/Infinite object, but two basic problems prevented this:

  1. The elapsed property is cast to int so that it cannot be used for accurate duration and throughput calculations
  2. The "timer" keeps running after the progress has been finished.

A solution to both is as follows:

  • use monotonic() when finish method is called and initialize an attribute called end_ts
  • add a duration attribute that returns self.end_ts - self.start_ts, and is not cast to int
  • document that users should used duration rather than elapsed

I also wonder whether you should switch to perf_counter() from monotonic() at this point, but I am not sure whether in CPython or pypy there is any practical difference.

danizen avatar Jan 19 '22 02:01 danizen

The API exposed would enable this sort of output:

    progress.finish()
    count = progress.index
    duration = progress.duration
    tput = count / duration

    print(f'\nProcessed {count} records in {duration:.1f} seconds ({tput:.1f} per second)', file=sys.stderr)

danizen avatar Jan 19 '22 02:01 danizen