我正在运行一个简单的Tornado Flask应用程序,但视图一次只处理一个请求。我怎样才能使它处理多个并发请求?Flask和Tornado Applciation不处理多个并发请求
我正在使用的修复程序是fork和使用多个进程来处理请求,但我不喜欢该解决方案。
from flask import Flask
app = Flask(__name__)
@app.route('/flask')
def hello_world():
return 'This comes from Flask ^_^'
from tornado.wsgi import WSGIContainer
from tornado.ioloop import IOLoop
from tornado.web import FallbackHandler, RequestHandler, Application
from flasky import app
class MainHandler(RequestHandler):
def get(self):
self.write("This message comes from Tornado ^_^")
tr = WSGIContainer(app)
application = Application([
(r"/tornado", MainHandler),
(r".*", FallbackHandler, dict(fallback=tr)),
])
if __name__ == "__main__":
application.listen(8000)
IOLoop.instance().start()
其实这并不完全正确。 WSGI支持一个协同接口,你可以返回一个* iterable *(这可能是一个生成器),而不是完整的结果。不幸的是,并不是很多中间件都使用这个(我不知道)。 –
@JonasWielicki如果你有更多的信息会很棒,但我认为你可能会让人感到困惑。返回一个生成器允许流式响应(Flask支持这个),但是一个worker仍然处理一个响应。 – davidism
问题在于Flask/Werkzeug不知道如何使用Tornado,所以处理请求,运行视图和产生初始响应的所有事情都发生在Tornado的同步范围内。 – davidism