Django 使用gunicorn+;nginx

Django 使用gunicorn+;nginx,django,nginx,gunicorn,Django,Nginx,Gunicorn,我已经为我们的Django应用程序组装了一个集成服务器。一些特性仍处于试验阶段,导致请求过长 目前我还可以接受糟糕的表现,但我需要能够整合。每当我们使用导致长请求的功能时,应用程序都会挂起(如预期的那样),然后,可能在一分钟半后,返回一个“502-坏网关”。应用程序的其余部分工作正常 我查了一下gunicorn的日志,每当这种情况发生时,我都会得到一条像 2012-01-20 17:30:13 [23128] [DEBUG] GET /results/ 2012-01-20 17:30:43 [

我已经为我们的Django应用程序组装了一个集成服务器。一些特性仍处于试验阶段,导致请求过长

目前我还可以接受糟糕的表现,但我需要能够整合。每当我们使用导致长请求的功能时,应用程序都会挂起(如预期的那样),然后,可能在一分钟半后,返回一个“502-坏网关”。应用程序的其余部分工作正常

我查了一下gunicorn的日志,每当这种情况发生时,我都会得到一条像

2012-01-20 17:30:13 [23128] [DEBUG] GET /results/
2012-01-20 17:30:43 [23125] [ERROR] WORKER TIMEOUT (pid:23128)
Traceback (most recent call last):
  File "/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py", line 111, in run
    os.setpgrp()
OSError: [Errno 1] Operation not permitted
然而,这发生在实际的工作超时之前很久,我已经设置为10分钟,只是为了确保。下面是运行gunicorn的upstart脚本的一部分

description "..."

start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 5 seconds
kill timeout 5
respawn

env VENV="/path/to/a/virtual/env/"

#how to know the pid
pid file $VENV/run/guniconr-8080.pid

script
exec sudo -u demo $VENV/bin/gunicorn_django --preload --daemon -w 4 -t 600 --log-level debug --log-file $VENV/run/gunicorn-8080.log -p $VENV/run/gunicorn-8080.pid -b localhost:8080 /path/to/settings.py
end script
我正在运行gunicorn版本0.13.4。任何帮助都将不胜感激


这个问题是一个问题。

您是否直接连接到gunicorn?或者中间是否有ngnix?如果我没记错的话,nginx中大约有90秒超时

另外,对于此类性能不佳的请求,通常有两种解决方案:

  • 缓存结果并获取cron作业,以调用执行计算并填充缓存的自定义django管理命令

  • 像芹菜这样的异步任务队列执行实际的计算,您执行单独的请求来检查它是否准备就绪

您在Gunicorn试过吗


特别适用于慢速请求等。

正如标题所示,我正在使用nginx。我已经将测试的超时时间设置为10分钟,但它会提前超时(但是,超过90秒)。忽略这一点,可能不会超过90秒。。。你有从哪里得到这个号码的参考资料吗?…还有-我知道在一般情况下如何处理长时间运行的请求。这是一个开发中的功能,我需要能够在性能较差的情况下将其部署到我们的集成服务器上—在更好的硬件上,并且在进一步开发之后,请求不会长得离谱。我检查过,nginx的默认值显然是60秒。古尼科恩30。(90是我设定的gunicorn的,看)不,但我很确定问题在于配置错误。从那以后,我们已经解决了性能问题,所以我从来没有完全解决过这个问题。我现在不能使用async Gunicorn workers有很多原因,尽管它们可能是将来的一种选择。