我想写与龙卷风非阻塞API。 但是,当我尝试在当地的第一个请求阻塞API。 我试图用不同的浏览器,但结果是一样的。
我打开Chrome和Firefox。 在Chrome我去的http://本地主机:8888 /测试第一 ,它加载时我立刻去的http://本地主机:8888 /测试秒从Firefox。
我期待从Firefox的请求将,而另一人仍在加载来回答。 但他们两人都在等待,当第一个请求完成他们两人完成。
我的代码和输出:
期待控制台输出:
First request: 2017-11-22 22:23:22.093497
Second request: 2017-11-22 22:23:24.580052
Second answer: 2017-11-22 22:23:25.580509
First answer: 2017-11-22 22:23:37.579263
控制台输出
First request: 2017-11-22 22:23:22.093497
First answer: 2017-11-22 22:23:37.579263
Second request: 2017-11-22 22:23:37.580052
Second answer: 2017-11-22 22:23:37.580509
test_first.py:
import tornado.web
import datetime
class First(tornado.web.RequestHandler):
@tornado.web.asynchronous
async def get(self):
print("First request: " + str(datetime.datetime.now()))
for _ in range(1000000000):
pass
self.set_status(200)
self.write("OK")
self.finish()
print("First answer: " + str(datetime.datetime.now()))
test_second.py:
import tornado.web
import datetime
class Second(tornado.web.RequestHandler):
@tornado.web.asynchronous
async def get(self):
print("Second request: " + str(datetime.datetime.now()))
self.set_status(200)
self.write("OK")
self.finish()
print("Second answer: " + str(datetime.datetime.now()))
app.py:
import tornado
from test_first import First
from test_second import Second
class Application(tornado.web.Application):
def __init__(self):
ENDPOINTS = [
# USERS #
(r"/test-first", First),
(r"/test-second", Second)
]
SETTINGS = {
"debug": True,
"autoreload": True,
"serve_traceback": True,
"compress_response": True
}
tornado.web.Application.__init__(self, ENDPOINTS, SETTINGS)
if __name__ == "__main__":
print("dinliyor...")
Application().listen(8888)
tornado.ioloop.IOLoop.instance().start()