1、tornado是单线程的,同时WSGI应用又是同步的,如果我们使用Tornado启动WSGI应用,理论上每次只能处理一个请求都是,任何一个请求有阻塞,都会导致tornado的整个IOLOOP阻塞。如下所示,我们同时发出两个GET请求向http://127.0.0.1:5000/
会发现第一个发出的请求会在大约5s之后返回,而另一个请求会在10s左右返回,我们可以判断,这两个请求是顺序执行的。
from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoopfrom flask import Flask import time app = Flask(__name__) @app.route('/') def index(): time.sleep(5) return 'OK' if __name__ == '__main__': http_server = HTTPServer(WSGIContainer(app)) http_server.listen(5000) IOLoop.instance().start()
2、我们知道,tornado实现异步运行同步函数,我们只能使用线程来运行,如下所示:
import tornado.web import tornado.ioloop import time import tornado class IndexHandler(tornado.web.RequestHandler): """主路由处理类""" @tornado.gen.coroutine def get(self):