4

我正在使用 django-python、javascript 开发一个项目。当我从视图中调用一个长时间运行的进程(耗时)大约 20 多分钟时,该进程成功启动。我在 ajax 中使用 loader 来通知用户进程正在运行。该过程完成后,加载程序将停止并更改为已完成状态。

但问题是每次在进程启动 14.59 分钟后,加载程序都会停止并且状态更改为已完成。但是在后台运行的进程还没有完成。在那之后页面崩溃。该过程完成后,我将结果绑定在网页中的标签下。在该标签中出现错误504(网关超时)。在 web 控制台日志Failed to load resource: server 响应状态为 504 (Gateway Timeout),打印出上述错误。如果有人知道,请帮我解决这个问题。

django 在那之后是否正在关闭连接?如果是这样,有可能在 django 设置(settings.py)中提到超时。我尝试在 ajax 调用中给出超时但同样的问题返回。我的疑问是在 django 开发服务器上。django开发服务器是否有超时。但是当我搜索这个问题时,我发现在nginx服务器中出现了相同类型的问题。django 是依赖 nginx 还是使用它?

我试图提供有关我的问题的所有信息,如果有任何进一步的说明,请告诉我。

4

1 回答 1

4

服务器总是在特定时间后关闭其连接,可以通过更改其配置来修改它,但这不是一个好方法。我建议您尝试通过以下方式减少脚本花费的时间:

  • 优化您的代码。
  • 通过缓存经常使用的数据
  • 使用后端服务来处理您的数据并将它们存储在可以快速访问的临时存储中,例如 memcache 或 redis。

您还应该处理 ajax 调用的超时:

$.ajax({
    ...
    timeout: 1000,
    error: function(jqXHR, textStatus, errorThrown) {
        if(textStatus==="timeout") {
           //do something on timeout / show appropriate message.
        } 
    }
});​

调整性能和优化编码技术从而减少时间的参考: https ://docs.djangoproject.com/en/1.10/topics/db/optimization/ https://docs.djangoproject.com/en/1.10/topics/performance/ https://realpython.com/blog/python/caching-in-django-with-redis/

于 2017-03-28T13:36:45.280 回答