from multiprocessing.managers import BaseManager try: from tqdm import tqdm except ImportError: tqdm = None def Manager(): """ Thread save manager for frame counter """ m = BaseManager() m.start() return m class Counter: """ Frame Counter """ def __init__(self, total, initial, use_tqdm=True): self.first_update = True self.initial = initial self.left = total - initial self.current = 0 self.use_tqdm = use_tqdm and (tqdm is not None) if use_tqdm: self.tqdm_bar = tqdm( total=self.left, initial=0, dynamic_ncols=True, unit="fr", leave=True, smoothing=0.01, ) def update(self, value): if self.use_tqdm: if self.first_update: self.tqdm_bar.reset(self.left) self.first_update = False self.tqdm_bar.update(value) else: self.current += value def close(self): if self.use_tqdm: self.tqdm_bar.close() def get_frames(self): return self.current