コード例 #1
0
ファイル: thread_pool.py プロジェクト: ptsurko/coursera_cloud
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()
コード例 #2
0
    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
コード例 #3
0
ファイル: queue_test.py プロジェクト: ptsurko/coursera_cloud
 def setUp(self):
     self.queue = Queue()
コード例 #4
0
ファイル: queue_test.py プロジェクト: ptsurko/coursera_cloud
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)
コード例 #5
0
ファイル: thread_pool.py プロジェクト: ptsurko/coursera_cloud
 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))