【问题标题】:How to prevent FCGI request timeout in Django如何防止 Django 中的 FCGI 请求超时
【发布时间】:2012-03-13 08:52:54
【问题描述】:

我有一个 webhook,需要一点时间才能完成(大约 5 分钟)。但是,请求会在大约 30 秒后超时。

我在与 HostGator 共享主机上并使用 FCGI 进行部署。

我认为请求超时,因为在处理请求之前没有 HTTPResponse。如果我可以在处理请求时从视图中生成一些 HTTPResponse,那么脚本可能会运行更长时间。

[P.S.:之前我尝试过 Google App Engine,使用 print 'hi' 会在浏览器中打印“hi”而不是记录它。 Django也是一样的。这样做可能会在请求完成时发送响应。](我在 Django IRC 上被告知,即使我能够打印以发送消息作为响应,它只会在返回 Httpresponse 时抛出。)因此它建议使用带有可迭代对象的 Httpresponse。

【问题讨论】:

    标签: python django fastcgi


    【解决方案1】:

    超时在网络服务器中,而不是在 Django 中。您向网络服务器发出请求并从中获得响应,因此您无法获得该响应之外的任何内容。在您的情况下,您应该在服务器上创建一个后台任务,通常由 cron 或 celery 启动(它认为您不能在 hostgator 上运行 celery,所以使用 cron)和任务队列。在客户端,您会定期使用 AJAX 向服务器发出请求,因此您可以检查任务的状态并在任务完成时显示通知。

    【讨论】:

    • 嗨 ilavar,是的,超时来自 apache 服务器,而不是来自 Django。但是超时是因为 Django 脚本超过 30 秒没有回复(因为它只在处理后才抛出输出)。它已经是一个 webhook(也被 Celery 或其他队列程序使用)。通过在可迭代中使用 HttpResponse(如 IRC 上的建议)解决了该问题。很快就会在这里发布。
    【解决方案2】:

    Django IRC 的人告诉使用 HttpResponse 和生成器来连续发送输出,从而防止脚本空闲超时。

    将 Httpresponse 与生成器一起使用的代码非常棒,described herehere

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多