采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
参照老师5-2课程中,将time.sleep改为非阻塞await asyncio.sleep。并发访问不同接口时发现确实可以实现异步效果,两个并发请求几乎同时完成。但访问同一个请求接口时,还是跟同步效果一样,一个请求结束后,才开始执行第二个请求。这是为什么呢?难道是访问不同请求接口时,每个请求接口生成一个协程task放入事件循环中,但同一个接口,同一时刻就只允许一个task放入事件循环中?
我做实验也是同样的结果,tornado官网的解释:
https://www.tornadoweb.org/en/stable/faq.html
确实是浏览器机制的问题,如果换成打开两个cmd用curl测试,就是没问题的
或者按照官网给的测试方法也是没有问题的
老师的可能测试方法不一样
赞一个,不同的浏览器可能会有不同的策略
你的代码发上来我试试 两个接口即使一样也应该能同时完成
from tornado import web import tornado import asyncio class MainHandler(web.RequestHandler): async def get(self, *args, **kwargs): await asyncio.sleep(5) self.write("hello world") class MainHandler2(web.RequestHandler): async def get(self, *args, **kwargs): await asyncio.sleep(5) self.write("hello world2") if __name__ == '__main__': app = web.Application([ ("/", MainHandler), ("/2/", MainHandler2) ], debug=True) app.listen(8888) tornado.ioloop.IOLoop.current().start()
代码我测试过了 没有问题 你的5s太短了 看不出来 你设置为30再看看就知道了
tornado最新官方文档,解答问题一栏有提到。对同一接口的访问,主要是因为浏览器检测到,访问同一地址,就会先后执行
登录后可查看更多问答,登录/注册
异步IO并发编程/Form,ORM/aiomysql、peewee-async/epoll
962 18
1.8k 15
1.2k 15
1.2k 12
1.8k 11