我正在運行一個簡單的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