我尝试使用eventlet worker(django app)运行gunicorn:
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有意义(因为worker hangs和gunicorn可以理解它)。但是gunicorn并没有处理糟糕的观点2。
在实际情况中,似乎我们有一些无限循环,其中包含time.sleep()或其他猴子补丁方法,一段时间后我们的应用程序不会挂起但会有许多无限绿色线程并开始缓慢工作。
我的问题是如何设置gunicorn,它可以理解view1的错误并重新启动worker。
答案 0 :(得分:1)
您是否要限制执行任何请求的最长时间?好主意啊。截至2013-02,Gunicorn不支持开箱即用。
您可以使用eventlet.Timeout来实现它。根据您是想要快速还是分享,您可以仅将超时添加到您的应用程序中或作为Gunicorn的功能。他们的code很容易理解。