2013-03-13 69 views
2

我嘗試使用eventlet工人(Django應用程序)運行gunicorn:Gunicorn + eventlet超時

python manage.py run_gunicorn -k eventlet -t 5 

如果我有兩個壞的觀點:

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而感覺(因爲工作人員和gunicorn可以理解它)。但是gunicorn不能處理不好的觀點2。

在實際情況下,似乎我們有一些無限循環,time.sleep()或其他猴子修補方法在一段時間內和之後我們的應用程序不會掛起,但將有許多無限的綠色線程,並開始慢慢工作。

我的問題是我如何設置gunicorn它可以瞭解view1和重新啓動工人有什麼問題。

+0

這可能需要一些澄清。 '只對view2有意義......但gunicorn不處理vad view2' - 數字是否正確? – temoto 2013-03-14 08:22:03

回答

1

是否要限制執行任何請求的最長時間?好主意啊。截至2013 - 02年,Gunicorn不支持開箱即用。

您可以使用eventlet.Timeout來實現它。取決於你是想快速還是分享,你可以只將超時添加到你的應用程序中,或者作爲Gunicorn的一個功能。他們的code很容易遵循。

+0

是的。我的目標是爲每個請求添加超時。我們使用heroku,他們的負載平衡器有30秒的代理超時。所以任何超過30秒的請求都沒有意義。謝謝。但我真的不希望叉gunicorn我希望有任何標準的方法。所以我喜歡爲每個請求添加eventlet.TImeout(30)。 – 2013-03-14 21:25:55