【问题标题】:Intensive job in django view crashing gunicorn worker threadsdjango 中的密集工作视图崩溃 gunicorn 工作线程
【发布时间】:2012-12-20 10:44:59
【问题描述】:

我有一个 django 应用程序,它在上传照片时对照片进行一些处理。此处理大约需要 100 毫秒。

我在 nginx 后面使用带有 gunicorn 的 Django。

目前这是同步完成的,我使用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 请求的上下文中返回)。

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

【问题讨论】:

  • 没有代码,很难判断——视图是过早返回还是阻塞了工作线程返回?
  • 另外,您是否尝试过使用开发服务器(或不同线程模式下的 gunicorn)调用视图?
  • @fish2000 不确定我是否有任何值得发布的代码。我不认为视图不会过早返回。
  • 你解决了这个问题了吗?我想我在这里也有同样的问题。视图处理得很快,但不知何故工作人员超时......
  • @Anton 我确实解决了这个问题,我已经为你发布了答案。

标签: django gunicorn


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多