【发布时间】:2012-12-20 10:44:59
【问题描述】:
我有一个 django 应用程序,它在上传照片时对照片进行一些处理。此处理大约需要 100 毫秒。
我在 nginx 后面使用带有 gunicorn 的 Django。
目前这是同步完成的,我使用subprocess调用处理,获取结果并在HTTP请求的框架内返回结果。
问题在于,虽然实际处理只需要大约 100 毫秒,但视图有时需要很多秒才能返回,导致 gunicorn 工作线程崩溃并显示如下消息:
2012-12-18 15:01:04 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31957] [INFO] Booting worker with pid: 31957
(日志级别为DEBUG,我没有得到进一步的输出)。有时它会关闭整个网络服务器。
有什么办法可以缓解这个问题吗?目前流量还不够高,无法考虑将处理放在队列中并进行异步通信(即使这样,我们也希望阻塞并仍然在 HTTP 请求的上下文中返回)。
任何人都可以深入了解问题可能出在哪里吗?
【问题讨论】:
-
没有代码,很难判断——视图是过早返回还是阻塞了工作线程返回?
-
另外,您是否尝试过使用开发服务器(或不同线程模式下的 gunicorn)调用视图?
-
@fish2000 不确定我是否有任何值得发布的代码。我不认为视图不会过早返回。
-
你解决了这个问题了吗?我想我在这里也有同样的问题。视图处理得很快,但不知何故工作人员超时......
-
@Anton 我确实解决了这个问题,我已经为你发布了答案。