def test_result(self): self.evens = _Pipeline() self.evens.add_destination(gathering_function) self.evens.start() self.odds = _Pipeline() self.odds.add_destination(gathering_function) self.odds.start() self.original = _Pipeline() self.original.add_origin(generator) self.original.add_destination(conditional_routing, pipeline_msg = self.messaging) self.original.start() self.messaging.register_pipeline_queue("even", self.evens._queues[0]) self.messaging.register_pipeline_queue("odd", self.odds._queues[0]) self.original.feed(100) self.original.join() self.messaging.flush() self.odds.join() self.evens.join() evens = [x for x in self.evens.as_completed()] odds = [x for x in self.odds.as_completed()] self.messaging.close_pipeline_queue("odd") self.messaging.close_pipeline_queue("even")
def test_correct_ordering(self): self.pipe = _Pipeline() self.pipe.add_destination(third_stage) self.pipe.add_task(second_stage) self.pipe.add_origin(first_stage) self.pipe.start() self.pipe.feed_chunk([0]) self.pipe.join() result = [x for x in self.pipe.as_completed()] self.assertEqual(result, [-10])
def test_basic_pipeline(self): self.pipe = _Pipeline() self.pipe.add_task(first_stage) self.pipe.add_task(second_stage) self.pipe.add_task(third_stage) self.pipe.start() self.pipe.feed_chunk([0]) self.pipe.join() result = [x for x in self.pipe.as_completed()] self.assertEqual(result, [-10])
def test_chunked_pipeline(self): # In the following pipeline, we'll use ONE origin to send the numbers one through 100 through the pipeline self.pipe = _Pipeline() self.pipe.add_origin(iterator_origin, num=1, chunk_size=11) self.pipe.add_task(first_stage, num=1, chunk_size=17) self.pipe.add_task(second_stage, num=1, chunk_size=3) self.pipe.add_task(third_stage, num=1, chunk_size=9) self.pipe.start() self.pipe.feed_chunk([100]) self.pipe.join() result = set(x for x in self.pipe.as_completed()) expected = set((x + 1 - 3) * 5 for x in range(100)) self.assertEqual(result, expected)
def test_bad_join(self): # You can't join an unstarted pipeline self.pipe = _Pipeline() self.assertRaises(SequenceError, self.pipe.join)
def test_bad_sequence(self): # You can't feed a pipe before starting it self.pipe = _Pipeline() self.assertRaises(SequenceError, self.pipe.feed_chunk, (1,))