19

多くの検索とグーグルの後、私は井戸に戻ってきました。私は Django 1.4 を持っており、Django を gevent で動作させる方法を理解するためのまともな実例を探しています。私は Django フレームワークが好きですが、長いポーリングを処理するために必要です。私はすでに、長いポーリング要求を処理し、約 10 フレーム/秒で http を介して画像ストリーミングを行う gevent を独自に使用する稼働中のサーバーを持っています。この部分のフレームワークを提供するために、Django の優れた機能をすべて使用したいと思います。

そこには多くの例がありますが、残念ながら、これらのどれもそのままでは機能しないようです! これら 2 つのものがどのように連携しているかを理解するために、実際の例があれば非常に役立ちます。

これまでに見つけたものと問題は次のとおりです。

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ 問題: ImportError: 設定 'webchat.settings' をインポートできませんでした (sys.path にありますか?) : webchat.settings という名前のモジュールはありません

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst 問題: gevent を取得する許可の問題でインストールが失敗する git ハブから手動で取得しようとしました。この例は実行されますが、ブラウザーの接続時にこれらのエラーが生成されます。

これらは参考情報ですが、基本的な答えは提供していません。 Python (Django を使用) で Comet を理解するのに助けが必要 https://bitbucket.org/denis/gevent/src/tip/examples/webchat/chat/views.py http://blog.gevent.org/2009/10/10 /simpler-long-polling-with-django-and-gevent/

誰かが説明できることを願っています(お願いします、かなりお願いします....)これです:Django 1.4を使用して作成された基本的なサイトがあります-チュートリアルはこちらhttps://docs.djangoproject.com/en/1.4/intro/tutorial01/優れています。ここで、gevent を使用して非同期イベントを処理できるようにするために、どのような変更を行う必要があるかを理解する必要があります。私はそれが難しいことではないと確信しています - 何をすべきか、また何が起こっているのかを説明するためにそれを理解している人が必要です (monkey_patch のようなもので)。

ありがとう。

4

1 に答える 1

24

gevent + monkey patching を使用して Django を実行する方法は次のとおりです。

  1. manage.py最初の行(シバンの後)がfrom gevent import monkey; monkey.patch_all()

  2. 新しいrun_production_serverスクリプトを追加しました (以下を参照)。

1234最後に、リクエストをポート(run_production_serverリッスンしているポート)にプロキシするようにフロントエンド Web サーバーを構成しました。

from gevent import monkey; monkey.patch_all()
from gevent.wsgi import WSGIServer

from django.core.management import setup_environ    
import settings
setup_environ(settings)

from django.core.handlers.wsgi import WSGIHandler as DjangoWSGIApp
application = DjangoWSGIApp()
server = WSGIServer(("127.0.0.1", 1234), application)
print "Starting server on http://127.0.0.1:1234"
server.serve_forever()

このサーバーは十分な「Web スケール」ではないと不満を言う人もいるかもしれません。それを証明するベンチマークを提供できるとは思えませんが、心配な場合は、サーバーにgunicornまたはuwsgiを使用することもできます。しかし、これは私にとってはうまく機能します。

于 2012-06-12T07:02:45.340 に答える