web-dev-qa-db-ja.com

Tornado WebサーバーでDjangoをどのように使用しますか?

Tornado WebサーバーでDjangoを使用するにはどうすればよいですか?

27
xRobot

非常に簡単です(特にDjango 1.4)の場合)。

1-Django project(およびapps)をビルドして、正常に動作することを確認します。

2-ルートフォルダに新しいpythonファイルを作成します(Django-admin.py startprojectを使用したのと同じディレクトリ)

3-次に、以下のコードをコピーし、os.environ['Django_SETTINGS_MODULE']行を編集して、その新しい.pyファイルに貼り付けます。

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import Django.core.handlers.wsgi
#sys.path.append('/home/lawgon/') # path to your project ( if you have it in another dir).


def main():
    os.environ['Django_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module
    application = Django.core.handlers.wsgi.WSGIHandler()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

Django 1.6+は次のようになります:

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
from Django.core.wsgi import get_wsgi_application

def main():
    os.environ['Django_SETTINGS_MODULE'] = 'myproject.settings' # path to your settings module
    application = get_wsgi_application()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()
46
Moayyad Yaghi

更新:

TornadoWebサーバーを使用してDjangoで適切に実行する方法を示す最小限の動作デモを作成しました。

https://github.com/tamasgal/Django-tornado

元の投稿:

備考:WSGIアプリケーションワークフローが1.6から1.7に変更されました。インポートを置き換える必要があります

import Django.core.handlers.wsgi

from Django.core.wsgi import get_wsgi_application

アプリケーションの初期化をから変更します

application = Django.core.handlers.wsgi.WSGIHandler()

application = get_wsgi_application()

これはMoayyad Yaghiの回答から変更されたコードです:

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import Django.core.handlers.wsgi
from Django.core.wsgi import get_wsgi_application
#sys.path.append('/home/lawgon/') # path to your project ( if you have it in another dir).


def main():
    os.environ['Django_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module
    application = Django.core.handlers.wsgi.WSGIHandler()
    application = get_wsgi_application()
    container = tornado.wsgi.WSGIContainer(application)
    http_server = tornado.httpserver.HTTPServer(container)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()
5
tamasgal

tornado-proxy というプロジェクトがあります。ただし、 Nginx を使用することをお勧めします。 Nginx構成で、proxy_passを使用して次のように通話を転送できるようになりました。

location /comet {
  proxy_pass http://localhost:8081;
}

location / {
  proxy_pass http://localhost:8080;
}
4
MyGGaN

現実の世界では、Djangoといくつかの本番用Webサーバーを [〜#〜] wsgi [〜#〜] に接続します。このデモはTornadoを実行する方法を示しています(そしてそれはウェブサーバーです)そしてDjango 1つから並んでpython異なるURLプレフィックスを提供するモジュール: https://github.com/bdarnell/Django-tornado-demo 。ただし、Tornadoは、Django宛てのリクエストの処理をブロックします。

2
mike_k