【发布时间】:2013-01-12 23:52:04
【问题描述】:
- 如果代码没有使用这个装饰器,它是非阻塞的吗?
- 为什么这个名字是异步的,意思是添加装饰器让代码异步?
- 为什么@tornado.gen 总是和@tornado.web.asynchronous 一起使用?
【问题讨论】:
-
这看起来像是在 google 上搜索的精彩内容列表。
-
搜索了很多不同的答案,完全搞不清哪个是正确的
【问题讨论】:
@tornado.web.asynchronousprevents the the RequestHandler from automatically calling self.finish()。而已;这只是意味着 Tornado 将保持连接打开,直到您手动调用 self.finish()。
不使用此装饰器的代码可以阻塞,也可以不阻塞。使用装饰器不会以任何方式改变这一点。
正如@Steve Peak 所说,您将装饰器用于异步请求,例如数据库检索。
为 Tornado 3.1+ 更新:如果你使用 @gen.coroutine,你也不需要使用 @asynchronous。我相信旧的@gen.engine 接口仍然需要@asynchronous。
【讨论】:
这样想。当您需要请求说数据库或其他 url 来检索数据时,您不想阻止您的龙卷风 IO。因此,@tornado.web.asynchronous 将允许 IO 在等待内容加载(例如数据库或 url)时处理其他请求。
它们是相似的。您很可能会使用@tornado.web.asynchronous。
【讨论】:
@tornado.web.asynchronous 本质上只是一个标记,您放置在诸如 get() 或 post() 之类的处理程序方法上,它告诉框架它不应该在方法返回时自动调用 finish(),因为它包含的代码将设置finish() 稍后调用。
【讨论】: