3

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

任何人都可以深入了解问题可能出在哪里?

4

2 回答 2

0

我通过使用eventlet线程解决了这个问题。

于 2013-03-13T15:03:02.283 回答
0

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

于 2013-03-13T15:52:53.113 回答