Tornado WebサーバーでDjangoを使用するにはどうすればよいですか?
非常に簡単です(特に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()
更新:
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()
tornado-proxy というプロジェクトがあります。ただし、 Nginx を使用することをお勧めします。 Nginx構成で、proxy_passを使用して次のように通話を転送できるようになりました。
location /comet {
proxy_pass http://localhost:8081;
}
location / {
proxy_pass http://localhost:8080;
}
現実の世界では、Djangoといくつかの本番用Webサーバーを [〜#〜] wsgi [〜#〜] に接続します。このデモはTornadoを実行する方法を示しています(そしてそれはウェブサーバーです)そしてDjango 1つから並んでpython異なるURLプレフィックスを提供するモジュール: https://github.com/bdarnell/Django-tornado-demo 。ただし、Tornadoは、Django宛てのリクエストの処理をブロックします。