首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tornado异步简单程序

问Tornado异步简单程序
EN

Stack Overflow用户
提问于 2020-09-19 18:19:16
回答 1查看 141关注 0票数 0

我需要这个简单的程序的帮助,我不确定这个龙卷风应用程序是否是异步的(我添加了异步/等待),但我相信我应该添加一些东西。我想让程序异步地监听请求,提前谢谢。

代码语言:javascript
复制
import tornado.web
import tornado.ioloop
import fun, func2

class A(tornado.web.Application):
    async def post(self):
        result = await func2()

class B(tornado.web.Application):
    async def put(self):
        result = await func()

def main():
    app = tornado.web.Application([
        (r"/A", A),
        (r"/B", B)
    ])
    return app


if __name__ == "__main__":
    app = main()
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()
EN

回答 1

Stack Overflow用户

发布于 2020-11-17 04:44:34

您不应该使用两个应用程序,而应该使用一个具有两个处理程序的应用程序。如果您愿意,这些处理程序方法可以是异步的。龙卷风从地面上支持了这一点。

所以可能更像这样,

典型的WebApp框架:

代码语言:javascript
复制
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

的示例

代码语言:javascript
复制
from tornado.httpclient import AsyncHTTPClient

async def asynchronous_fetch(url):
    http_client = AsyncHTTPClient()
    response = await http_client.fetch(url)
    return response.body

所以对于你的例子,这看起来更像这样的

代码语言:javascript
复制
import tornado.ioloop
import tornado.web
from tornado.httpclient import AsyncHTTPClient

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

class AsyncHandler(tornado.web.RequestHandler):
    async def get(self):
        http_client = AsyncHTTPClient()
        response = await http_client.fetch("<some_url")
        return response.body

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/async", AsyncHandler),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

您必须确保在async方法中使用的每个模块或库也是async的,并且在请求结束之前不会阻塞调用。对于您使用的任何I/O来说尤其如此。包括文件、web请求、数据库访问等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63967648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档