【问题标题】:Page does not self refresh after task in Taskqueue is done updating values任务队列中的任务完成更新值后页面不会自动刷新
【发布时间】:2014-05-19 21:39:41
【问题描述】:

所以我遇到了一个问题,即工作人员的 POST 命令中的任务耗时过长,并且出现了 DeadlineExceededErrors。我开始使用 Taskqueues,这部分现在效果很好——不再出现 Deadline 错误。现在的问题是我的主页在任务队列完成之前“刷新”(self.redirect),所以新的细节不会自动显示,用户必须自己按刷新,这很麻烦。您对解决此问题的最简单方法有什么建议吗?我的应用程序的高级概述如下:

1) Main Handler 具有 Get 和 Post - Get 写入一个 html 页面,该页面在队列中的任务完成后显示新值。它还有一个表单,可以将查询提交到其 Post 部分。

Post 部分将任务添加到任务队列中,然后调用 self.redirect 回到主 html 页面。

2) Main Worker 有一个 Post 命令 - 这是添加到队列中的内容。运行大约需要 1-2 分钟,然后使用新值更新 ndb.Model 元素。

回到 Main Handler Get 函数中,ndb.Model 元素调用其 .query() 函数以返回新值。

任何帮助或建议将不胜感激。谢谢!

【问题讨论】:

    标签: google-app-engine app-engine-ndb


    【解决方案1】:

    需要 1-2 分钟才能执行的任务不适合用户交互:用户不习惯等待那么久。通常,有三个选项可以解决此问题:

    (a) 提供刷新按钮。

    (b) 启动一个计时器,定期检查任务是否完成。当任务完成并停止时,此计时器会更新页面。请记住,用户可能会离开启动任务的页面。

    (c) 以不同的方式(电子邮件或推送通知)传递任务的结果。

    【讨论】:

    • 你能给我更多关于定时器的信息吗?我应该编写自己的计时器还是应该再次使用任务队列或者您推荐的选项是什么?谢谢!
    • 计时器应该在您的客户端代码中运行。搜索 JavaScript 计时器以获取示例。
    【解决方案2】:

    如果您的用户愿意等待那么久,您可以在没有时间限制的自定义模块中处理这些请求。请参阅 GAE 文档中的模块。

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2022-12-06
      • 2015-04-29
      • 2021-10-15
      相关资源
      最近更新 更多