2

イベントレットワーカー(djangoアプリ)でgunicornを実行しようとしています:

python manage.py run_gunicorn -k eventlet -t 5

2 つの悪いビューがある場合:

def view1(request):
    while 1:
        time.sleep(0.001) #same as eventlet.sleep
    return HttpResponse('ok')

def view2(request):
    while 1:
        pass
    return HttpResponse('ok')

オプション -t (--timeout) は、view2 に対してのみ意味があります (worker がハングし、gunicorn がそれを理解できるため)。しかし、gunicorn は悪いビュー 2 を処理しません。

実際のケースでは、time.sleep() またはその他のモンキー パッチを適用したメソッドを使用した無限ループがいくつかあり、しばらくするとアプリケーションはハングしませんが、多くの無限の緑色のスレッドがあり、ゆっくりと動作を開始します。

私の質問は、ビュー1の何が問題なのかを理解してワーカーを再起動できるようにgunicornをセットアップする方法です。

4

1 に答える 1

1

リクエストを実行する最大時間を制限しますか? いい考えだ。2013 年 2 月現在、Gunicorn はそのままではこれをサポートしていません。

eventlet.Timeoutを使用して実装できます。迅速にするか共有するかに応じて、タイムアウトをアプリケーションにのみ追加するか、Gunicorn の機能として追加できます。彼らのコードは簡単に理解できます。

于 2013-03-14T08:41:10.877 に答える