2

我尝试使用 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 有意义(因为工人挂起并且 gunicorn 可以理解它)。但是 gunicorn 不能处理不好的 view2。

在实际情况中,似乎我们有一些无限循环,其中包含 time.sleep() 或其他猴子修补方法,一段时间后,我们的应用程序不会挂起,但会有许多无限绿色线程并开始缓慢工作。

我的问题是我如何设置 gunicorn 以了解 view1 有什么问题并重新启动工作人员。

4

1 回答 1

1

您想限制执行任何请求的最长时间吗?好主意啊。截至 2013 年 2 月,Gunicorn 不支持此功能。

您可以使用eventlet.Timeout来实现它。根据您是想要快速还是共享,您可以将超时仅添加到您的应用程序中或作为 Gunicorn 的一项功能。他们的代码很容易理解。

于 2013-03-14T08:41:10.877 回答