Пример #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_no_ref(self):
     # In this usage, there is no direct hard reference to the
     # WaitIterator itself, only the Future it returns. Since
     # WaitIterator uses weak references internally to improve GC
     # performance, this used to cause problems.
     yield gen.with_timeout(datetime.timedelta(seconds=0.1),
                            gen.WaitIterator(gen.sleep(0)).next())
Пример #3
0
    def test_wait_timeout_preempted(self):
        c = locks.Condition()

        # This fires before the wait times out.
        self.io_loop.call_later(0.01, c.notify)
        wait = c.wait(timedelta(seconds=0.02))
        yield gen.sleep(0.03)
        yield wait  # No TimeoutError.
Пример #4
0
    def test_acquire_timeout_preempted(self):
        sem = locks.Semaphore(1)
        yield sem.acquire()

        # This fires before the wait times out.
        self.io_loop.call_later(0.01, sem.release)
        acquire = sem.acquire(timedelta(seconds=0.02))
        yield gen.sleep(0.03)
        yield acquire  # No TimeoutError.
Пример #5
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)
Пример #6
0
    def test_notify_all_with_timeout(self):
        c = locks.Condition()
        self.record_done(c.wait(), 0)
        self.record_done(c.wait(timedelta(seconds=0.01)), 1)
        self.record_done(c.wait(), 2)

        # Wait for callback 1 to time out.
        yield gen.sleep(0.02)
        self.assertEqual(['timeout'], self.history)

        c.notify_all()
        self.assertEqual(['timeout', 0, 2], self.history)
Пример #7
0
    def test_notify_n_with_timeout(self):
        # Register callbacks 0, 1, 2, and 3. Callback 1 has a timeout.
        # Wait for that timeout to expire, then do notify(2) and make
        # sure everyone runs. Verifies that a timed-out callback does
        # not count against the 'n' argument to notify().
        c = locks.Condition()
        self.record_done(c.wait(), 0)
        self.record_done(c.wait(timedelta(seconds=0.01)), 1)
        self.record_done(c.wait(), 2)
        self.record_done(c.wait(), 3)

        # Wait for callback 1 to time out.
        yield gen.sleep(0.02)
        self.assertEqual(['timeout'], self.history)

        c.notify(2)
        yield gen.sleep(0.01)
        self.assertEqual(['timeout', 0, 2], self.history)
        self.assertEqual(['timeout', 0, 2], self.history)
        c.notify()
        self.assertEqual(['timeout', 0, 2, 3], self.history)
Пример #8
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)
Пример #9
0
    def test_acquire_timeout(self):
        sem = locks.Semaphore(2)
        yield sem.acquire()
        yield sem.acquire()
        acquire = sem.acquire(timedelta(seconds=0.01))
        self.io_loop.call_later(0.02, sem.release)  # Too late.
        yield gen.sleep(0.3)
        with self.assertRaises(gen.TimeoutError):
            yield acquire

        sem.acquire()
        f = sem.acquire()
        self.assertFalse(f.done())
        sem.release()
        self.assertTrue(f.done())
Пример #10
0
    def test_garbage_collection(self):
        # Test that timed-out waiters are occasionally cleaned from the queue.
        c = locks.Condition()
        for _ in range(101):
            c.wait(timedelta(seconds=0.01))

        future = c.wait()
        self.assertEqual(102, len(c._waiters))

        # Let first 101 waiters time out, triggering a collection.
        yield gen.sleep(0.02)
        self.assertEqual(1, len(c._waiters))

        # Final waiter is still active.
        self.assertFalse(future.done())
        c.notify()
        self.assertTrue(future.done())
Пример #11
0
    def test_garbage_collection(self):
        # Test that timed-out waiters are occasionally cleaned from the queue.
        sem = locks.Semaphore(value=0)
        futures = [sem.acquire(timedelta(seconds=0.01)) for _ in range(101)]

        future = sem.acquire()
        self.assertEqual(102, len(sem._waiters))

        # Let first 101 waiters time out, triggering a collection.
        yield gen.sleep(0.02)
        self.assertEqual(1, len(sem._waiters))

        # Final waiter is still active.
        self.assertFalse(future.done())
        sem.release()
        self.assertTrue(future.done())

        # Prevent "Future exception was never retrieved" messages.
        for future in futures:
            self.assertRaises(TimeoutError, future.result)
Пример #12
0
 def worker():
     while True:
         item = yield q.get()
         self.accumulator += item
         q.task_done()
         yield gen.sleep(random() * 0.01)
Пример #13
0
 def get(self):
     self.write("asdf")
     self.flush()
     # Wait a bit to ensure the chunks are sent and received separately.
     yield gen.sleep(0.01)
     self.write("qwer")
Пример #14
0
 def server_task():
     yield server.write(b"1234")
     yield gen.sleep(0.01)
     yield server.write(b"5678")
     server.close()
Пример #15
0
 def test_sleep(self):
     yield gen.sleep(0.01)
     self.finished = True
Пример #16
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))
Пример #17
0
def hello():
    yield gen.sleep(0.001)
    raise gen.Return("hello")
Пример #18
0
 def f(index):
     with (yield sem.acquire()):
         history.append('acquired %d' % index)
         yield gen.sleep(0.01)
         history.append('release %d' % index)
Пример #19
0
 def test_wait_timeout(self):
     c = locks.Condition()
     wait = c.wait(timedelta(seconds=0.01))
     self.io_loop.call_later(0.02, c.notify)  # Too late.
     yield gen.sleep(0.03)
     self.assertFalse((yield wait))