コード例 #1
0
 def test_already_closed_output(self):
     q1 = queues.Queue()
     q_out = queues.Queue()
     q_out.close()
     multiplexer_task = tasks.spawn(more_queues.multiplex([q1], q_out))
     kernels.run(timeout=0.01)
     self.assertTrue(multiplexer_task.is_completed())
     self.assertIsNone(multiplexer_task.get_result_nonblocking())
コード例 #2
0
 def test_closed_output(self):
     q1 = queues.Queue()
     q_out = queues.Queue()
     multiplexer_task = tasks.spawn(more_queues.multiplex([q1], q_out))
     with self.assertRaises(kernels.KernelTimeout):
         kernels.run(timeout=0.01)
     q1.put_nonblocking('x')
     q_out.close()
     kernels.run(timeout=0.01)
     self.assertEqual(get_many(q1), ['x'])
     self.assertEqual(get_many(q_out), [])
     self.assertTrue(multiplexer_task.is_completed())
     self.assertIsNone(multiplexer_task.get_result_nonblocking())
コード例 #3
0
    def test_multiplex(self):
        q1 = queues.Queue()
        q2 = queues.Queue()
        q_out = queues.Queue()
        multiplexer_task = tasks.spawn(more_queues.multiplex([q1, q2], q_out))

        q1.put_nonblocking('x')
        with self.assertRaises(kernels.KernelTimeout):
            kernels.run(timeout=0.01)
        self.assertEqual(get_many(q_out), ['x'])

        q2.put_nonblocking('a')
        q1.put_nonblocking('y')
        q2.put_nonblocking('b')
        with self.assertRaises(kernels.KernelTimeout):
            kernels.run(timeout=0.01)
        # Hmmm... The order of q_out items depends on the internal
        # implementation of multiplex.  I am not sure whether this is a
        # good test case.
        self.assertEqual(get_many(q_out), ['a', 'y', 'b'])

        q2.put_nonblocking('c')
        q2.put_nonblocking('d')
        q2.put_nonblocking('e')
        with self.assertRaises(kernels.KernelTimeout):
            kernels.run(timeout=0.01)
        self.assertEqual(get_many(q_out), ['c', 'd', 'e'])

        q2.close()
        q1.put_nonblocking('z')
        with self.assertRaises(kernels.KernelTimeout):
            kernels.run(timeout=0.01)
        self.assertEqual(get_many(q_out), ['z'])
        self.assertFalse(multiplexer_task.is_completed())

        q1.put_nonblocking('w')
        q1.close()
        kernels.run(timeout=0.01)
        self.assertEqual(get_many(q_out), ['w'])
        self.assertTrue(q_out.is_closed())
        self.assertTrue(multiplexer_task.is_completed())
        self.assertIsNone(multiplexer_task.get_result_nonblocking())
コード例 #4
0
 def test_cancel(self):
     q1 = queues.Queue()
     q2 = queues.Queue()
     q_out = queues.Queue(1)
     multiplexer_task = tasks.spawn(more_queues.multiplex([q1, q2], q_out))
     q1.put_nonblocking('x')
     q1.put_nonblocking('y')
     q2.put_nonblocking('a')
     q2.put_nonblocking('b')
     with self.assertRaises(kernels.KernelTimeout):
         kernels.run(timeout=0.01)
     multiplexer_task.cancel()
     kernels.run(timeout=0.01)
     self.assertTrue(multiplexer_task.is_completed())
     self.assertIsInstance(multiplexer_task.get_exception_nonblocking(),
                           tasks.Cancelled)
     self.assertTrue(q_out.is_closed())
     # No input item is lost.
     self.assertEqual(get_many(q1), ['y'])
     self.assertEqual(get_many(q2), ['a', 'b'])
     self.assertEqual(get_many(q_out), ['x'])
コード例 #5
0
 def test_round_robin(self):
     q1 = queues.Queue()
     q1.put_nonblocking('x')
     q1.put_nonblocking('y')
     q1.put_nonblocking('z')
     q1.close()
     q2 = queues.Queue()
     q2.put_nonblocking('a')
     q2.put_nonblocking('b')
     q2.put_nonblocking('c')
     q2.put_nonblocking('d')
     q2.put_nonblocking('e')
     q2.put_nonblocking('f')
     q2.close()
     q_out = queues.Queue()
     kernels.run(more_queues.multiplex([q1, q2], q_out), timeout=0.01)
     self.assertTrue(q_out.is_closed())
     self.assertEqual(
         q_out.close(graceful=False),
         ['x', 'a', 'y', 'b', 'z', 'c', 'd', 'e', 'f'],
     )