web-dev-qa-db-ja.com

FlaskとTornadoを一緒に使用しますか?

私はFlaskの大ファンです-一部は単純で、一部は extensions が多いためです。ただし、FlaskはWSGI環境で使用するためのものであり、WSGIは非ブロッキングではないため、特定の種類のアプリケーションのトルネード

それぞれに関数を呼び出すURLディスパッチャがあり、両方ともPython files(in Djangoを起動してはいけませんpython file but in flaskまたはtornadoあなたは)あなたのウェブサイトに2つの別々の部分があることは理にかなっています-1つの部分はTornadoでノンブロッキングジョブを実行し、もう1つはフラスコで書かれた部分?

これが良いアイデアである場合、FlaskとTornadoの間でCookie /セッションを共有するにはどうすればよいでしょうか?Flask独自のシステムとトルネードは独自のシステムを使用しますか?

54
Abdelouahab

ソリューションの50%を得たと思いますが、Cookieはまだテストされていませんが、Tornadoを使用してFlaskアプリケーションをロードし、Tornado + Flask一緒に:)

まず、flasky.py flaskアプリケーションが存在するファイル:

from flask import Flask
app = Flask(__name__)

@app.route('/flask')
def hello_world():
  return 'This comes from Flask ^_^'

そして、cyclone.py 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 __== "__main__":
  application.listen(8000)
  IOLoop.instance().start()

これがそれらを混ぜたい人を助けることを願っています:)

87
Abdelouahab

1 および 2 に基づいて、組み合わされた短い回答は

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __== "__main__":

    from tornado.wsgi import WSGIContainer
    from tornado.httpserver import HTTPServer
    from tornado.ioloop import IOLoop

    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(8000)
    IOLoop.instance().start()

2 、で言及されているパフォーマンスに関する警告を考慮してください

4
Ahmad Yoosofan