如何将通知推送到浏览器窗口?

时间:2015-10-05 09:08:45

标签: javascript python django

我有一个Django应用程序,它执行在后台运行的计算。计算需要5秒到2分钟。

我在芹菜上运行这些。它正在更新数据库中的表。

我每2秒在页面上进行一次DIV的autorefesh,这实质上是一个SQL查询。这意味着在显示某些数据之前会有许多不必要的SQL查询。毋庸置疑,这会增加数据库的负担。

是否有办法仅在更新表时触发刷新?

2 个答案:

答案 0 :(得分:1)

如果将后台任务分配给特定用户,则可以使用会话数据来指示任务已完成。在您的Ajax函数中,您可以查看此会话数据,并仅在您指示已完成此操作时查看数据库:

https://docs.djangoproject.com/en/1.8/topics/http/sessions/

另一种解决方案是使用用于同步的系统文件。例如:

  • 创建后台任务时会创建文件,其中包含开始日期和时间。您可以添加更多信息,例如请求它的用户。
  • 只要文件存在(进一步检查超时,检查文件中的数据),无需查看数据库。
  • 如果文件不存在,您知道请求已完成,您可以查看要更新的数据库。

此文件也可以作为Url访问(以避免Ajax请求)

答案 1 :(得分:-1)

也许你应该使用Jquery和ajax来做这个请求..

http://api.jquery.com/category/deferred-object/

希望它可以帮到你