From 77e4022ba6550650af794cc79a61e76cdc8959c9 Mon Sep 17 00:00:00 2001 From: tubby Date: Mon, 20 Jul 2020 02:43:07 +0200 Subject: [PATCH 1/7] Add deltatime between prints to avoid wasting too much time printin in tight loops --- progress/__init__.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/progress/__init__.py b/progress/__init__.py index 596eea7..39ddfc9 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -37,7 +37,7 @@ class Infinite(object): check_tty = True hide_cursor = True - def __init__(self, message='', **kwargs): + def __init__(self, message='', print_dt = .500,**kwargs): self.index = 0 self.start_ts = monotonic() self.avg = 0 @@ -49,6 +49,8 @@ def __init__(self, message='', **kwargs): self._width = 0 self.message = message + self.print_dt = print_dt + self._prev_write = self.start_ts - self.print_dt * 2 if self.file and self.is_tty(): if self.hide_cursor: @@ -92,6 +94,10 @@ def clearln(self): print('\r\x1b[K', end='', file=self.file) def write(self, s): + now = monotonic() + if now self.prev_write < self._print_dt: + return + self.prev_write = now if self.file and self.is_tty(): line = self.message + s.ljust(self._width) print('\r' + line, end='', file=self.file) From 91b0e07ab9ee65b4b8db19886e5825b99a2ea4e6 Mon Sep 17 00:00:00 2001 From: tubby Date: Mon, 20 Jul 2020 02:49:27 +0200 Subject: [PATCH 2/7] Fix tests. --- progress/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/progress/__init__.py b/progress/__init__.py index 39ddfc9..d5947b5 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -95,9 +95,9 @@ def clearln(self): def write(self, s): now = monotonic() - if now self.prev_write < self._print_dt: + if now - self._prev_write < self.print_dt: return - self.prev_write = now + self._prev_write = now if self.file and self.is_tty(): line = self.message + s.ljust(self._width) print('\r' + line, end='', file=self.file) From 46920a5bf2748ed1c4c42cdc202f49720d9f4632 Mon Sep 17 00:00:00 2001 From: lavrentivs Date: Tue, 21 Jul 2020 01:06:16 +0200 Subject: [PATCH 3/7] Follow code conventions. Remove print_dt from __init__ but allow changing it via kwargs. --- progress/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/progress/__init__.py b/progress/__init__.py index 76770eb..f366a99 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -36,8 +36,9 @@ class Infinite(object): check_tty = True hide_cursor = True - def __init__(self, message='', print_dt = .500,**kwargs): + def __init__(self, message='', **kwargs): self.index = 0 + self.print_dt = .5 self.start_ts = monotonic() self.avg = 0 self._avg_update_ts = self.start_ts @@ -49,7 +50,6 @@ def __init__(self, message='', print_dt = .500,**kwargs): self._max_width = 0 self._hidden_cursor = False self.message = message - self.print_dt = print_dt self._prev_write = self.start_ts - self.print_dt * 2 if self.file and self.is_tty(): From 9a4f825f2ce094371b81c76958531f5a8300abeb Mon Sep 17 00:00:00 2001 From: lavrentivs Date: Tue, 21 Jul 2020 01:20:01 +0200 Subject: [PATCH 4/7] Force writeln on finish. --- progress/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/progress/__init__.py b/progress/__init__.py index f366a99..4e747d0 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -39,6 +39,7 @@ class Infinite(object): def __init__(self, message='', **kwargs): self.index = 0 self.print_dt = .5 + self.prev_line = '' self.start_ts = monotonic() self.avg = 0 self._avg_update_ts = self.start_ts @@ -108,6 +109,8 @@ def writeln(self, line): self.file.flush() def finish(self): + self._prev_write = monotonic() - self.print_dt * 2 + self.writeln(self._prev_line) if self.file and self.is_tty(): print(file=self.file) if self._hidden_cursor: From 0eb15eaf9bb94570aa7bc5d0c1ff962ec109d637 Mon Sep 17 00:00:00 2001 From: lavrentivs Date: Tue, 21 Jul 2020 01:21:00 +0200 Subject: [PATCH 5/7] prev_line should be hidden --- progress/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/progress/__init__.py b/progress/__init__.py index 4e747d0..e827a6b 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -39,7 +39,7 @@ class Infinite(object): def __init__(self, message='', **kwargs): self.index = 0 self.print_dt = .5 - self.prev_line = '' + self._prev_line = '' self.start_ts = monotonic() self.avg = 0 self._avg_update_ts = self.start_ts From 6084bba86dbe89bc4dc7eafdb0162704fc794117 Mon Sep 17 00:00:00 2001 From: lavrentivs Date: Tue, 21 Jul 2020 01:22:02 +0200 Subject: [PATCH 6/7] Update prev_line in writeln --- progress/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/progress/__init__.py b/progress/__init__.py index e827a6b..5a5e8f9 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -98,6 +98,7 @@ def writeln(self, line): if now - self._prev_write < self.print_dt: return self._prev_write = now + self._prev_line = line if self.file and self.is_tty(): width = len(line) if width < self._max_width: From e43bf7d4a352c3824d861bf599df04ffc842a69d Mon Sep 17 00:00:00 2001 From: lavrentivs Date: Tue, 21 Jul 2020 01:22:50 +0200 Subject: [PATCH 7/7] Fix prev_line update --- progress/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/progress/__init__.py b/progress/__init__.py index 5a5e8f9..7776472 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -95,10 +95,10 @@ def start(self): def writeln(self, line): now = monotonic() + self._prev_line = line if now - self._prev_write < self.print_dt: return self._prev_write = now - self._prev_line = line if self.file and self.is_tty(): width = len(line) if width < self._max_width: