gpt4 book ai didi

asynchronous - Tornado @web.asynchronous @gen.coroutine VS @gen.coroutine 有什么区别

转载 作者:行者123 更新时间:2023-12-04 23:01:29 28 4
gpt4 key购买 nike

document , 如果方法也用@gen.coroutine 修饰,则不需要@web.asynchronous。像这样

@web.asynchronous
@gen.coroutine
def get(self):
...

但是,在文档中,他们还解释说,如果您使用@web.asynchronous,那么您应该调用 self.finish()。但是,在上面的情况下(一起使用两个装饰器)连接完成而没有调用“self.finish()”

我很好奇里面发生了什么

在下面的情况下,它的工作原理与上面不同。
@web.asynchronous
def get(self):
self.test()

@gen.coroutine
def test(self):
httpClient = AsyncHttpClient()
val = yield httpClient.fetch("http://www.google.com")
print test
#self.finish()

如果未调用“self.finish()”,则连接不会关闭。

有没有人可以解释一下?

最佳答案

secret 是here :

if isinstance(result, Future):
# If @asynchronous is used with @gen.coroutine, (but
# not @gen.engine), we can automatically finish the
# request when the future resolves. Additionally,
# the Future will swallow any exceptions so we need
# to throw them back out to the stack context to finish
# the request.
def future_complete(f):
f.result()
if not self._finished:
self.finish()
IOLoop.current().add_future(result, future_complete)
@asychronous检查返回 future 的方法(即 @gen.coroutine ),如果是,则添加 IOLoop 回调以在 future 完成时完成连接。

关于asynchronous - Tornado @web.asynchronous @gen.coroutine VS @gen.coroutine 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967996/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com