我有一个相当简单的代码,取自一个例子。
#!/usr/bin/python
import tornado.ioloop
import tornado.web
import tornado.gen
import time
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
for i in range(1,10):
self.write("%d<br>" % i)
self.flush()
yield tornado.gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 1)
self.finish()
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
它的表现并不像我期待的那样。如果我打开浏览器窗口并将其指向localhost:8888 /,它将显示1 [暂停1秒] 2 [暂停1秒]等。如果我打开第二个选项卡执行相同的请求,它将阻止直到第一个请求已完成。我错过了什么?
答案 0 :(得分:0)
似乎我应该使用其他浏览器或隐身窗口。
答案 1 :(得分:0)
@Germano是正确的,它是同一个url共享同一个连接。你可以用下面的代码进行测试。
#coding:utf8
from tornado import ioloop
from tornado import web
from tornado import gen
class MainHandler(web.RequestHandler):
@gen.coroutine
def get(self):
client_address = self.request.connection.stream.socket.getpeername()
print repr(client_address), 'enter'
yield gen.sleep(10)
self.write("Hello, world")
print repr(client_address), 'leave'
self.finish()
if __name__ == "__main__":
application = web.Application([
(r"/", MainHandler),
])
application.listen(8888)
ioloop.IOLoop.current().start()