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()
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()
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()
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()