Exemplo n.º 1
0
    def test_ventilator_stop(self):
        size = 100
        max_ventilation_queue_size = 10

        pool = DummyPool()

        ventilator = ConcurrentVentilator(ventilate_fn=pool.ventilate,
                                          items_to_ventilate=[{'item': i} for i in range(size)],
                                          max_ventilation_queue_size=max_ventilation_queue_size)
        pool.start(IdentityWorker, ventilator=ventilator)

        [pool.get_results() for _ in range(max_ventilation_queue_size)]

        # Stop the ventilator queue after some time, so there should only be 10 items left on it
        while ventilator._ventilated_items_count - ventilator._processed_items_count < max_ventilation_queue_size:
            time.sleep(.1)

        ventilator.stop()

        [pool.get_results() for _ in range(max_ventilation_queue_size)]
        with self.assertRaises(EmptyResultError):
            pool.get_results()

        pool.stop()
        pool.join()
Exemplo n.º 2
0
    def test_empty_ventilation(self):
        pool = DummyPool()
        ventilator = ConcurrentVentilator(pool.ventilate, [])
        pool.start(IdentityWorker, ventilator=ventilator)
        with self.assertRaises(EmptyResultError):
            pool.get_results()

        pool.stop()
        pool.join()
Exemplo n.º 3
0
    def test_multiple_iterations(self):
        size = 10
        iterations = 5

        pool = DummyPool()
        ventilator = ConcurrentVentilator(pool.ventilate, [{'item': i} for i in range(size)], iterations=iterations)
        pool.start(IdentityWorker, ventilator=ventilator)

        results = [pool.get_results() for _ in range(size * iterations)]
        self.assertEqual(sorted(results), sorted(list(range(size)) * iterations))
        with self.assertRaises(EmptyResultError):
            pool.get_results()

        ventilator.stop()
        pool.stop()
        pool.join()
Exemplo n.º 4
0
    def test_randomize_item_order(self):
        size = 100
        pool = DummyPool()
        items_to_ventilate_1 = [{'item': i} for i in range(size)]
        ventilator = ConcurrentVentilator(pool.ventilate, items_to_ventilate=items_to_ventilate_1)
        pool.start(IdentityWorker, ventilator=ventilator)
        first_results = [pool.get_results() for _ in range(size)]
        pool.stop()
        pool.join()

        pool = DummyPool()
        items_to_ventilate_2 = [{'item': i} for i in range(size)]
        ventilator = ConcurrentVentilator(pool.ventilate,
                                          items_to_ventilate=items_to_ventilate_2,
                                          randomize_item_order=True)
        pool.start(IdentityWorker, ventilator=ventilator)
        second_results = [pool.get_results() for _ in range(size)]
        pool.stop()
        pool.join()

        # Because we're using the dummy pool, without randomizing item order the results
        # should be exactly the list of ventilation items
        self.assertEqual(first_results, [item['item'] for item in items_to_ventilate_1])
        self.assertNotEqual(first_results, second_results)

        pool.stop()
        pool.join()