Gunicorn没有回应

时间:2015-05-09 08:20:44

标签: django gunicorn

我正在使用Gunicorn来服务Django应用程序,它工作正常,直到我将其超时从30秒更改为900000s,我必须这样做,因为我有一个用例,需要上传和处理一个巨大的文件(在某些情况下,过程占用超过30米)但是在这个改变之后,几个小时后Gunicorn没有反应,我想问题是所有工人(30岁)将在这段时间后忙于处理一些请求,奇怪的是它甚至发生了如果我根本没有运行那么长的请求,它会在django admin中正常探索。我想知道是否有办法监控gunicorn上的请求,并且看到工作人员忙于处理什么请求,我想知道让他们忙碌的请求。我试过了--log-file=- --log-level=debug,但它没有告诉任何关于请求的内容,我需要更详细的日志。

2 个答案:

答案 0 :(得分:4)

从最新的Gunicorn文档中,您可以使用cmd行/脚本:

--log-file - ("-" means log to stderr)
--log-level debug

或在配置文件中,您可以使用:

errorlog = '-'
accesslog = '-'
loglevel = 'debug'

但没有提及您在问题中指定的参数格式:

--log-file=- 
--log-level=debug

访问的默认日志记录是'无' (ref),所以在黑暗中拍摄,但这可以解释为什么没有收到详细的日志信息。这是来自Gunicorn来源的sample config file和最新的Gunicorn config docs

此外,您可能希望在Django中查看changing your logging configuration

答案 1 :(得分:-1)

虽然我也在寻找一个如何看待有多少工人忙碌的好答案,但你正在以错误的方式解决这个问题。对于需要很长时间的任务,您需要一个工作人员(如Celery / RabbitMQ)异步执行繁重的工作,同时您的请求/响应周期仍然很快。

我的网站上有一个脚本可能需要5分钟才能完成,这是我使用的好模式:

  1. 当请求首次出现时,产生任务并简单地返回HTTP 202 Accepted。其目的是"该请求已被接受处理,但处理尚未完成。"
  2. 让您的前端轮询相同的端点(每30秒就足够了)。只要任务未完成,返回202
  3. 最终当它完成返回200以及前端可能需要的任何数据时。
  4. 对于我的网站,我们希望更新超过10分钟的数据。我传递Accept-Datetime标头以指示可接受的数据量。如果我们的本地缓存副本早于此,我们就会产生任务循环。