Пример #1
0
    def test_reset_ventilator(self):
        """Resetting ventilator after all items were ventilated will make it re-ventilate the same items"""
        items_count = 100
        for pool in [DummyPool(), ThreadPool(10)]:
            ventilator = ConcurrentVentilator(ventilate_fn=pool.ventilate,
                                              items_to_ventilate=[{
                                                  'item': i
                                              } for i in range(items_count)],
                                              iterations=1)
            pool.start(IdentityWorker, ventilator=ventilator)

            # Readout all ventilated items
            for _ in range(items_count):
                pool.get_results()

            # Should fail reading the next, as all items were read by now
            with self.assertRaises(EmptyResultError):
                pool.get_results()

            # Resetting, hence will be read out the items all over again
            ventilator.reset()

            for _ in range(items_count):
                pool.get_results()

            with self.assertRaises(EmptyResultError):
                pool.get_results()

            pool.stop()
            pool.join()
Пример #2
0
    def test_reset_in_the_middle_of_ventilation(self):
        """Can not reset ventilator in the middle of ventilation"""
        for pool in [DummyPool(), ThreadPool(10)]:
            ventilator = ConcurrentVentilator(ventilate_fn=pool.ventilate,
                                              items_to_ventilate=[{
                                                  'item': i
                                              } for i in range(100)],
                                              iterations=None)
            pool.start(IdentityWorker, ventilator=ventilator)

            # Resetting is supported only when the ventilator has finished
            with self.assertRaises(NotImplementedError):
                ventilator.reset()

            pool.stop()
            pool.join()