Source code for alphatwirl.progressbar.ProgressReportPickup

# Tai Sakuma <tai.sakuma@gmail.com>
import multiprocessing
import time

##__________________________________________________________________||
[docs]class ProgressReportPickup(multiprocessing.Process):
[docs] def __init__(self, queue, presentation): multiprocessing.Process.__init__(self) self.queue = queue self.presentation = presentation self.last_wait_time = 1.0 # [second]
def run(self): try: self._run_until_the_end_order_arrives() self._run_until_reports_stop_coming() except KeyboardInterrupt: pass def _run_until_the_end_order_arrives(self): end_order_arrived = False while True: while not self.queue.empty(): report = self.queue.get() if report is None: # the end order end_order_arrived = True continue self.presentation.present(report) if end_order_arrived: break def _run_until_reports_stop_coming(self): self._read_time() while self.presentation.nreports() > 0: if self._time() - self.last_time > self.last_wait_time: break while not self.queue.empty(): report = self.queue.get() if report is None: continue self._read_time() self.presentation.present(report) def _time(self): return time.time() def _read_time(self): self.last_time = self._time()
##__________________________________________________________________||