2012-12-20 31 views
3

我有一个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请求的上下文内返回)。

任何人都可以洞察问题的可能性?

+0

没有代码,很难说 - 视图要么过早返回,要么阻塞工作线程返回? – fish2000

+0

另外,你有没有尝试用开发服务器(或在不同线程模式下的gunicorn)调用视图? – fish2000

+0

@ fish2000不知道我是否有任何值得发布的代码。这个观点并没有过早回归我不认为。 – fredley

回答

0

对于耗时的例程,异步执行是一个很好的解决方案。 Celery库非常适合这种工作。并且具有相对较低的入门级。

相关问题