2015-10-05 91 views
0

我有一個Django應用程序,它在後臺運行計算。計算需要5秒到2分鐘之間的任何時間。如何將通知推送到瀏覽器窗口?

我在芹菜上運行這些。它正在更新數據庫中的表格。

我正在做一個頁面上的DIV autorefesh每隔2秒,這本質上是一個SQL查詢。這意味着一些不必要的SQL查詢,直到顯示一些數據。不用說這是增加數據庫負載的問題。

只有在更新表時纔有觸發刷新的方法嗎?

+0

Is'nt有像流星JS如何做的方式,其中一個更新到數據庫顯示在客戶端窗口嗎? – ramdaz

回答

1

如果後臺任務被分配給特定的用戶,你可以使用會話數據以指示任務已完成。在你的Ajax功能,你可以看看這個會話數據,並且只看看數據庫時,你有跡象表明,這是完成:

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

另一種解決方案是使用系統文件,用於同步。例如:

  • 該文件是在創建後臺任務時創建的,具有開始日期和時間。您可以添加更多信息,例如請求它的用戶。
  • 只要文件存在(進一步檢查超時,檢查文件中的數據),無需查看數據庫。
  • 如果該文件不存在,則知道該請求已完成,並且您可以查看要更新的數據庫。

這個文件也可能訪問作爲一個網址(爲避免Ajax請求)

+0

我正在這樣做,但仍然有沒有像MeteorJs或一些基於JS的全堆棧的方式 – ramdaz

+0

我更新了我的答案。 – Dric512

相關問題