我有一个 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 请求的上下文中返回)。
任何人都可以深入了解问题可能出在哪里?