我有一个django应用程序,可以在上传时对照片进行一些处理。此处理大约需要100毫秒。
我正在使用Django在nginx后面使用gunicorn运行。
目前这是同步完成的,我使用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请求的上下文中返回)。
任何人都可以深入了解问题所在吗?