def test_coroutine1(self): loop = get_event_loop() d1 = Future() loop.call_later(0.2, d1.set_result, 1) a = yield c_summation(d1) self.assertEqual(a, 3) self.assertEqual(d1.result(), 1)
def wait_fd(fd, read=True): '''Wait for an event on file descriptor ``fd``. :param fd: file descriptor :param read=True: wait for a read event if ``True``, otherwise a wait for write event. This function must be invoked from a coroutine with parent, therefore invoking it from the main greenlet will raise an exception. Check how this function is used in the :func:`.psycopg2_wait_callback` function. ''' current = greenlet.getcurrent() parent = current.parent assert parent, '"wait_fd" must be called by greenlet with a parent' try: fileno = fd.fileno() except AttributeError: fileno = fd loop = get_event_loop() future = Future(loop=loop) # When the event on fd occurs switch back to the current greenlet if read: loop.add_reader(fileno, _done_wait_fd, fileno, future, read) else: loop.add_writer(fileno, _done_wait_fd, fileno, future, read) # switch back to parent greenlet parent.switch(future) return future.result()
def test_call_later(self): ioloop = get_event_loop() tid = yield loop_thread_id(ioloop) d = Future() timeout1 = ioloop.call_later( 20, lambda: d.set_result(current_thread().ident)) timeout2 = ioloop.call_later( 10, lambda: d.set_result(current_thread().ident)) # lets wake the ioloop self.assertTrue(has_callback(ioloop, timeout1)) self.assertTrue(has_callback(ioloop, timeout2)) timeout1.cancel() timeout2.cancel() self.assertTrue(timeout1._cancelled) self.assertTrue(timeout2._cancelled) timeout1 = ioloop.call_later( 0.1, lambda: d.set_result(current_thread().ident)) yield d self.assertTrue(d.done()) self.assertEqual(d.result(), tid) self.assertFalse(has_callback(ioloop, timeout1))