For example to track the progress in a database or stream it via http
from tqdm import tqdm
import time
class TqdmContextManager:
"""
A context manager to temporarily override the default tqdm class with a custom one.
This allows for custom behavior of tqdm progress bars globally within its context.
"""
def __init__(self):
# Save a reference to the original tqdm class
self.original_tqdm = tqdm
def __enter__(self):
# Override the global tqdm reference with our custom class upon entering the context
global tqdm
tqdm = CustomTqdm
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# Restore the original tqdm class upon exiting the context
global tqdm
tqdm = self.original_tqdm
class CustomTqdm(tqdm):
"""
A custom tqdm subclass that limits update frequency of progress output.
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.last_print_time = time.time() # Record the start time
self.update_every = 0.1 # Limit to printing every 0.1 seconds (10 times per second)
def update(self, n=1):
"""
Override the update method to control the frequency of progress output.
"""
current_time = time.time()
if current_time - self.last_print_time >= self.update_every:
# Print progress if enough time has passed since the last print
print(f"Progress: {self.n}/{self.total}", end='\r', flush=True)
self.last_print_time = current_time # Update the last print time
# Example usage of the custom tqdm with a context manager
def some_function():
"""
A sample function to demonstrate the use of the custom tqdm progress bar.
"""
for i in tqdm(range(50)):
time.sleep(0.05) # Simulate work with a delay
# Use the custom tqdm progress bar within the context manager
with TqdmContextManager():
some_function()
No comments:
Post a Comment