| 426 | if hasattr(__class__, 'render_lock'): __class__.render_lock.release() |
| 427 | |
| 428 | def terminate(self): |
| 429 | if self.queue and current_thread() != self.trace_thread: self.queue.join(); self.queue.put(None) |
| 430 | if hasattr(__class__, 'render_lock'): __class__.render_lock.acquire() |
| 431 | try: |
| 432 | if not self: return |
| 433 | self.active = False |
| 434 | if hasattr(self, 'eta'): del self.eta |
| 435 | if not any(__class__.pbars): |
| 436 | self.render() |
| 437 | print("\x1b[?25h" + '\n' * len(__class__.pbars), end='', flush=True) |
| 438 | __class__.pbars.clear() |
| 439 | finally: |
| 440 | if hasattr(__class__, 'render_lock'): __class__.render_lock.release() |
| 441 | |
| 442 | |
| 443 | class PBarReader: |