我有一个django应用程序,它可以在上载时对照片进行一些处理。这个处理大约需要100ms。在django查看崩溃gunicorn工作线程的密集工作
我使用Django,在nginx后面运行gunicorn。
目前这是同步完成的,我用subprocess
来调用处理,得到结果并在HTTP请求的框架内返回结果。
的问题是,尽管实际处理只需要〜100ms时,该视图有时需要许多秒返回,造成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请求的上下文内返回)。
任何人都可以洞察问题的可能性?
没有代码,很难说 - 视图要么过早返回,要么阻塞工作线程返回? – fish2000
另外,你有没有尝试用开发服务器(或在不同线程模式下的gunicorn)调用视图? – fish2000
@ fish2000不知道我是否有任何值得发布的代码。这个观点并没有过早回归我不认为。 – fredley