我需要这个简单的程序的帮助,我不确定这个龙卷风应用程序是否是异步的(我添加了异步/等待),但我相信我应该添加一些东西。我想让程序异步地监听请求,提前谢谢。
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()发布于 2020-11-17 04:44:34
您不应该使用两个应用程序,而应该使用一个具有两个处理程序的应用程序。如果您愿意,这些处理程序方法可以是异步的。龙卷风从地面上支持了这一点。
所以可能更像这样,
典型的WebApp框架:
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()的示例
from tornado.httpclient import AsyncHTTPClient
async def asynchronous_fetch(url):
http_client = AsyncHTTPClient()
response = await http_client.fetch(url)
return response.body所以对于你的例子,这看起来更像这样的
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请求、数据库访问等。
https://stackoverflow.com/questions/63967648
复制相似问题