我们从Python开源项目中,提取了以下14个代码示例,用于说明如何使用tornado.gen.Runner()。
def test_yield_in_with(self): @gen.engine def f(): self.callback = yield gen.Callback('a') with StackContext(functools.partial(self.context, 'c1')): # This yield is a problem: the generator will be suspended # and the StackContext's __exit__ is not called yet, so # the context will be left on _state.contexts for anything # that runs before the yield resolves. yield gen.Wait('a') with self.assertRaises(StackContextInconsistentError): f() self.wait() # Cleanup: to avoid GC warnings (which for some reason only seem # to show up on py33-asyncio), invoke the callback (which will do # nothing since the gen.Runner is already finished) and delete it. self.callback() del self.callback
def test_yield_in_with(self): @gen.engine def f(): try: self.callback = yield gen.Callback('a') with StackContext(functools.partial(self.context, 'c1')): # This yield is a problem: the generator will be suspended # and the StackContext's __exit__ is not called yet, so # the context will be left on _state.contexts for anything # that runs before the yield resolves. yield gen.Wait('a') except StackContextInconsistentError: # In python <= 3.3, this suspended generator is never garbage # collected, so it remains suspended in the 'yield' forever. # Starting in 3.4, it is made collectable by raising # a GeneratorExit exception from the yield, which gets # converted into a StackContextInconsistentError by the # exit of the 'with' block. pass with self.assertRaises(StackContextInconsistentError): f() self.wait() # Cleanup: to avoid GC warnings (which for some reason only seem # to show up on py33-asyncio), invoke the callback (which will do # nothing since the gen.Runner is already finished) and delete it. self.callback() del self.callback