class ThreadPool(object): def __init__(self, num_workers=None, max_workers=None): self._threads = [] self._queue = Queue() for _ in range(num_workers): self._threads.append(_PoolThread(self._queue)) def execute(self, func, *args, **kwargs): self._queue.put(functools.partial(func, *args, **kwargs)) def stop(self): for t in self._threads: t.stop()
def run(self) -> List[Any]: device_manager = RequiredFeature('device_manager').request() if self.idle_devices_only: devices = device_manager.get_idle_devices() else: devices = device_manager.get_devices() if self.minimum_api is not None: devices = [ device for device in devices if device.api_level() >= self.minimum_api ] total_devices = len(devices) if total_devices == 0: raise Exception( f"No devices found with api level greater or equal than " f"{str(self.minimum_api)} to apply function mapper.") # prepare devices queue devices_to_use: Queue[Device] = Queue(elements=devices) # prepare output queue output_queue: Queue[Output] = Queue() # type: ignore # prepare items to map queue if self.items_to_map is None: for i in range(0, total_devices): thread = MultipleQueueConsumerThread( self.func, devices_queue=devices_to_use, devices_are_consumable=True, extra_args=self.extra_args, extra_kwargs=self.extra_kwargs, output_queue=output_queue, fail_times_limit=self.fail_times_limit, default_output=self.default_output, name=f"MQCThread-{str(i)}") thread.start() watchdog_thread = WatchDogThread(output_queue, total_devices) self.wait_for_watchdog_to_finish(device_manager, watchdog_thread) else: items_queue = Queue(elements=self.items_to_map) for i in range(0, total_devices): thread = MultipleQueueConsumerThread( self.func, items_queue=items_queue, items_are_consumable=True, devices_queue=devices_to_use, devices_are_consumable=False, extra_args=self.extra_args, extra_kwargs=self.extra_kwargs, output_queue=output_queue, fail_times_limit=self.fail_times_limit, default_output=self.default_output, name=f"MQCThread-{str(i)}") thread.start() watchdog_thread = WatchDogThread(output_queue, len(self.items_to_map)) self.wait_for_watchdog_to_finish(device_manager, watchdog_thread) # collect output results = output_queue.pop_all() return results
def setUp(self): self.queue = Queue()
class QueueTestCase(unittest.TestCase): def setUp(self): self.queue = Queue() def testSetGet(self): self.queue.put(1) self.queue.put(2) self.queue.put(3) self.assertEqual(self.queue.get(), 1) self.assertEqual(self.queue.get(), 2) self.assertEqual(self.queue.get(), 3) def testSetGet2(self): self.queue.put(1) self.assertEqual(self.queue.get(), 1) self.queue.put(2) self.assertEqual(self.queue.get(), 2) def testEmpty(self): self.assertRaises(Empty, self.queue.get)
def __init__(self, num_workers=None, max_workers=None): self._threads = [] self._queue = Queue() for _ in range(num_workers): self._threads.append(_PoolThread(self._queue))