2013-03-13 45 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