コード例 #1
0
 def test_put_timeout_preempted(self):
     q = queues.Queue(1)
     q.put_nowait(0)
     put = q.put(1, timeout=timedelta(seconds=0.01))
     q.get()
     yield gen.sleep(0.02)
     yield put  # No TimeoutError.
コード例 #2
0
    def test_order(self):
        q = queues.Queue()
        for i in [1, 3, 2]:
            q.put_nowait(i)

        items = [q.get_nowait() for _ in range(3)]
        self.assertEqual([1, 3, 2], items)
コード例 #3
0
 def test_blocking_get_wait(self):
     q = queues.Queue()
     q.put(0)
     self.io_loop.call_later(0.01, q.put, 1)
     self.io_loop.call_later(0.02, q.put, 2)
     self.assertEqual(0, (yield q.get(timeout=timedelta(seconds=1))))
     self.assertEqual(1, (yield q.get(timeout=timedelta(seconds=1))))
コード例 #4
0
 def test_blocking_put_wait(self):
     q = queues.Queue(1)
     q.put_nowait(0)
     self.io_loop.call_later(0.01, q.get)
     self.io_loop.call_later(0.02, q.get)
     futures = [q.put(0), q.put(1)]
     self.assertFalse(any(f.done() for f in futures))
     yield futures
コード例 #5
0
 def test_put_with_getters(self):
     q = queues.Queue()
     get0 = q.get()
     get1 = q.get()
     yield q.put(0)
     self.assertEqual(0, (yield get0))
     yield q.put(1)
     self.assertEqual(1, (yield get1))
コード例 #6
0
    def test_get_timeout(self):
        q = queues.Queue()
        get_timeout = q.get(timeout=timedelta(seconds=0.01))
        get = q.get()
        with self.assertRaises(TimeoutError):
            yield get_timeout

        q.put_nowait(0)
        self.assertEqual(0, (yield get))
コード例 #7
0
 def test_nonblocking_put_with_getters(self):
     q = queues.Queue()
     get0 = q.get()
     get1 = q.get()
     q.put_nowait(0)
     # put_nowait does *not* immediately unblock getters.
     yield gen.moment
     self.assertEqual(0, (yield get0))
     q.put_nowait(1)
     yield gen.moment
     self.assertEqual(1, (yield get1))
コード例 #8
0
 def test_get_clears_timed_out_getters(self):
     q = queues.Queue()
     getters = [q.get(timedelta(seconds=0.01)) for _ in range(10)]
     get = q.get()
     self.assertEqual(11, len(q._getters))
     yield gen.sleep(0.02)
     self.assertEqual(11, len(q._getters))
     self.assertFalse(get.done())  # Final waiter is still active.
     q.get()  # get() clears the waiters.
     self.assertEqual(2, len(q._getters))
     for getter in getters:
         self.assertRaises(TimeoutError, getter.result)
コード例 #9
0
 def test_put_clears_timed_out_putters(self):
     q = queues.Queue(1)
     # First putter succeeds, remainder block.
     putters = [q.put(i, timedelta(seconds=0.01)) for i in range(10)]
     put = q.put(10)
     self.assertEqual(10, len(q._putters))
     yield gen.sleep(0.02)
     self.assertEqual(10, len(q._putters))
     self.assertFalse(put.done())  # Final waiter is still active.
     q.put(11)  # put() clears the waiters.
     self.assertEqual(2, len(q._putters))
     for putter in putters[1:]:
         self.assertRaises(TimeoutError, putter.result)
コード例 #10
0
    def test_put_timeout(self):
        q = queues.Queue(1)
        q.put_nowait(0)  # Now it's full.
        put_timeout = q.put(1, timeout=timedelta(seconds=0.01))
        put = q.put(2)
        with self.assertRaises(TimeoutError):
            yield put_timeout

        self.assertEqual(0, q.get_nowait())
        # 1 was never put in the queue.
        self.assertEqual(2, (yield q.get()))

        # Final get() unblocked this putter.
        yield put
コード例 #11
0
    def test_async_for(self):
        q = queues.Queue()
        for i in range(5):
            q.put(i)

        namespace = exec_test(
            globals(), locals(), """
        async def f():
            results = []
            async for i in q:
                results.append(i)
                if i == 4:
                    return results
        """)
        results = yield namespace['f']()
        self.assertEqual(results, list(range(5)))
コード例 #12
0
    def test_maxsize(self):
        self.assertRaises(TypeError, queues.Queue, maxsize=None)
        self.assertRaises(ValueError, queues.Queue, maxsize=-1)

        q = queues.Queue(maxsize=2)
        self.assertTrue(q.empty())
        self.assertFalse(q.full())
        self.assertEqual(2, q.maxsize)
        self.assertTrue(q.put(0).done())
        self.assertTrue(q.put(1).done())
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
        put2 = q.put(2)
        self.assertFalse(put2.done())
        self.assertEqual(0, (yield q.get()))  # Make room.
        self.assertTrue(put2.done())
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
コード例 #13
0
    def test_float_maxsize(self):
        # Non-int maxsize must round down: http://bugs.python.org/issue21723
        q = queues.Queue(maxsize=1.3)
        self.assertTrue(q.empty())
        self.assertFalse(q.full())
        q.put_nowait(0)
        q.put_nowait(1)
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
        self.assertRaises(queues.QueueFull, q.put_nowait, 2)
        self.assertEqual(0, q.get_nowait())
        self.assertFalse(q.empty())
        self.assertFalse(q.full())

        yield q.put(2)
        put = q.put(3)
        self.assertFalse(put.done())
        self.assertEqual(1, (yield q.get()))
        yield put
        self.assertTrue(q.full())
コード例 #14
0
    def test_repr_and_str(self):
        q = queues.Queue(maxsize=1)
        self.assertIn(hex(id(q)), repr(q))
        self.assertNotIn(hex(id(q)), str(q))
        q.get()

        for q_str in repr(q), str(q):
            self.assertTrue(q_str.startswith('<Queue'))
            self.assertIn('maxsize=1', q_str)
            self.assertIn('getters[1]', q_str)
            self.assertNotIn('putters', q_str)
            self.assertNotIn('tasks', q_str)

        q.put(None)
        q.put(None)
        # Now the queue is full, this putter blocks.
        q.put(None)

        for q_str in repr(q), str(q):
            self.assertNotIn('getters', q_str)
            self.assertIn('putters[1]', q_str)
            self.assertIn('tasks=2', q_str)
コード例 #15
0
    def test_producer_consumer(self):
        q = queues.Queue(maxsize=3)
        history = []

        # We don't yield between get() and task_done(), so get() must wait for
        # the next tick. Otherwise we'd immediately call task_done and unblock
        # join() before q.put() resumes, and we'd only process the first four
        # items.
        @gen.coroutine
        def consumer():
            while True:
                history.append((yield q.get()))
                q.task_done()

        @gen.coroutine
        def producer():
            for item in range(10):
                yield q.put(item)

        consumer()
        yield producer()
        yield q.join()
        self.assertEqual(list(range(10)), history)
コード例 #16
0
 def test_get_with_putters(self):
     q = queues.Queue(1)
     q.put_nowait(0)
     put = q.put(1)
     self.assertEqual(0, (yield q.get()))
     self.assertIsNone((yield put))
コード例 #17
0
 def test_nonblocking_get_exception(self):
     q = queues.Queue()
     self.assertRaises(queues.QueueEmpty, q.get_nowait)
コード例 #18
0
 def test_nonblocking_get(self):
     q = queues.Queue()
     q.put_nowait(0)
     self.assertEqual(0, q.get_nowait())
コード例 #19
0
 def test_get_timeout_preempted(self):
     q = queues.Queue()
     get = q.get(timeout=timedelta(seconds=0.01))
     q.put(0)
     yield gen.sleep(0.02)
     self.assertEqual(0, (yield get))
コード例 #20
0
 def test_nonblocking_put_exception(self):
     q = queues.Queue(1)
     q.put(0)
     self.assertRaises(queues.QueueFull, q.put_nowait, 1)