def __init__(self, devices, options, verbose=0, mode='threading', max_threads=1, stdout=sys.stdout, stderr=sys.stderr): self.devices = to_list(devices) self.workqueue = WorkQueue(mode=mode) self.pipe_handlers = weakref.WeakValueDictionary() self.verbose = verbose self.stdout = options.stdoutfile self.stderr = options.stdoutfile self.devnull = open(os.devnull, 'w') self.channel_map = {'fatal_errors': self.stderr, 'debug': self.stdout} self.completed = 0 self.total = 0 self.failed = 0 self.failed_devices = set() self.status_bar_length = 0 self.set_max_threads(max_threads) self.task = None # Listen to what the workqueue is doing. self.workqueue.job_init_event.listen(self._on_job_init) self.workqueue.job_started_event.listen(self._on_job_started) self.workqueue.job_error_event.listen(self._on_job_error) self.workqueue.job_succeeded_event.listen(self._on_job_succeeded) self.workqueue.job_aborted_event.listen(self._on_job_aborted) self.options = options