前端動態獲取後台處理進度顯示在進度條上

2022-06-11 06:57:11 字數 1095 閱讀 4608

實現思路

我主要是借鑑了這篇部落格的思路

我來簡述一下他的思路,他前端用到了ajax非同步請求,乙個用於獲取冗長的資料,就比如我後台要跑一千次統計,是需要很長時間的,另乙個是乙個週期ajax,每隔一段時間就去後台訪問拿資料,後台巧妙的地方是開了乙個全域性變數,用於存放程式執行的狀態,偽**如下

全域性變數s

主函式(前端請求這個鏈結需要比較長的時間才能返回資料):

s=0''''

後台處理資料

''''

s=10

''''

後台處理資料

''''

如此重複

最後返回資料的時候s=100

輔助函式:

返回s的值

這是他的實現思路,就是通過全域性變數給主函式插樁,告知輔助函式主函式執行到哪一步了

兩個ajxa用的很巧妙,很簡單的乙個實現方法

它山之石可以攻玉

他的思路的問題是沒有考慮到併發性,多使用者下肯定是不能用同乙個全域性變數s的

我的乙個思路

眾所周知,每個使用者都有乙個獨立的會話,那麼就可以,把這個全域性變數存在session裡面,實現互相不干擾。

思路肯定沒問題的,但是被ajax的機制坑了,ajax非同步請求的時候session是不能在後台函式沒有執行完成的時候更新的,這就導致輔助函式不能訪問到沒執行完成主函式的session的

我的第二個思路

那麼session不行,我索性將全域性變數改成乙個map,前端兩個ajax在訪問後台的時候,帶乙個隨機數過去,作為map的key,全域性變數作為map的value,這樣隨機數的衝突是很小的,後台執行進度可以併發訪問了

前端偽**

ajax1:

非同步訪問主函式

傳遞乙個隨機數seed

等待資料返回並顯示

殺死定時器

定時器:

ajax2:

非同步訪問輔助函式

傳遞乙個隨機數seed

拿到後台map中的全域性變數

更改進度條顯示為全域性遍歷的值

使用flask框架踩過的一些坑

首先要開啟flask的多執行緒

不然後臺是單執行緒的,前端非同步訪問,後台在處理主函式的時候根本無暇顧及輔助函式

進度條顯示

最近的專案需求中涉及到了顯示進度的圖示,因此就簡單實現了一下,拿出來獻醜了 方法實現很簡單,主要是使用了framelayout的特殊性來實現的疊加顯示的 有次需求的同學們可以參考一下呦3 成功的 失敗的 進行中的 初始化 param attrs private void initview attri...

任務處理進度條顯示

var xyz createbar total width,total height,background color,border width,border color,block color,scroll speed,block count,scroll count,action to perf...

如何顯示進度條?

在許多程式中,程式需要自己做些事情而不受使用者輸入的干擾。這時就需要給使用者一些可見的顯示,以表明程式正在做一些事情及完成的進度。在wxpython中,這通常使用乙個進度條來管理,如圖9.5所示。圖9.5 例9.5顯示了產生圖9.5的 例9.5 生成乙個進度條 import wx if name m...