Django视图两次调用Firefox

时间:2015-06-16 11:08:30

标签: django postgresql google-chrome firefox django-views

编辑:此问题解决了我的问题:What happens when no response is received for a request? I'm seeing retries

我有一个奇怪的问题。我有一个Django应用程序。前端有两种形式。我通过相同的Ajax post方法提交表单

    // code to get and format form data to get into the format I need in the backend

    var webURL = "showFormOutput";
    $.post(webURL,
        dataToSend,
        callback
          ).fail(function(jqXHR, textStatus, errorThrown)
            {
                console.log("Status: " + textStatus);
                console.log("Error: " + errorThrown);
            });

在与该url对应的Django视图中,我执行以下操作:

  1. 打印消息“查看功能”以记录我在视图中。
  2. 解析后期数据并将其放入适当的变量中。将这些变量传递给单独文件中的Python函数。我们将此函数称为getQueryResults。
  3. 使用这些变量创建两个Postgres查询(两种形式)。打印日志消息“查询已创建”。
  4. 使用Python的线程模块执行这两个查询。我运行以下两行,为两个查询threading.Thread(target=threadFunction, args=(query,).start()
  5. 创建两个单独的线程
  6. 当postgres查询返回时,登录threadFunction“查询结果就绪”。
  7. 这是一个长时间运行的查询 - 最多需要十分钟。

    在Chrome中,这非常有效。但是,在Firefox(我认为也是Safari)中,我遇到了以下问题:

    1. 使用Firefox时,我可以在pg_stat_activity中看到两个查询正在按预期运行。但是,大约5分钟后,会运行四个查询,即启动另外两个SAME查询。
    2. 这也反映在我的日志中。我收到消息“查看功能”和“查询创建”打印了。这意味着以某种方式,从视图重新启动执行。即使将http.response.timeout增加到30000也会发生这种情况。
    3. 有时,Firefox只会转到$ .post的fail()情况,而textStatus只是说“Error”而errorThrown是空白的。有时,它按预期打印我的查询结果,但它等待第二组查询完成。我认为这可能是我的Python线程的一个问题,但由于线程从不在任何地方调用视图,因此再次执行整个视图是没有意义的!在客户端,似乎没有再次发送POST请求。
    4. 注意:我使用django基于文件系统的缓存来缓存查询结果。这可能是个问题吗?第二个重复的查询集甚至在第一个实际集返回结果之前就会出现,所以我怀疑这是问题所在。

      有没有人知道为什么使用Firefox会导致我的视​​图被调用两次?

0 个答案:

没有答案