Spaces:
Runtime error
Runtime error
""" | |
IO/concurrency helpers for `tqdm.contrib`. | |
""" | |
from collections import deque | |
from concurrent.futures import ThreadPoolExecutor | |
from ..auto import tqdm as tqdm_auto | |
__author__ = {"github.com/": ["casperdcl"]} | |
__all__ = ['MonoWorker'] | |
class MonoWorker(object): | |
""" | |
Supports one running task and one waiting task. | |
The waiting task is the most recent submitted (others are discarded). | |
""" | |
def __init__(self): | |
self.pool = ThreadPoolExecutor(max_workers=1) | |
self.futures = deque([], 2) | |
def submit(self, func, *args, **kwargs): | |
"""`func(*args, **kwargs)` may replace currently waiting task.""" | |
futures = self.futures | |
if len(futures) == futures.maxlen: | |
running = futures.popleft() | |
if not running.done(): | |
if len(futures): # clear waiting | |
waiting = futures.pop() | |
waiting.cancel() | |
futures.appendleft(running) # re-insert running | |
try: | |
waiting = self.pool.submit(func, *args, **kwargs) | |
except Exception as e: | |
tqdm_auto.write(str(e)) | |
else: | |
futures.append(waiting) | |
return waiting | |