繁華開滿天機(jī)
2022-10-13 10:58:10
我正在使用 Django 開發(fā)一個(gè)網(wǎng)站。我有大約 50 個(gè)函數(shù)。并且大約需要 1 分鐘才能獲得所有這些結(jié)果。問題是我在我的應(yīng)用程序中使用了 heroku。Heroku 有 30 秒的時(shí)間來獲取請(qǐng)求。有人建議我使用后臺(tái)任務(wù)?,F(xiàn)在我在 Python RQ 中使用后臺(tái)作業(yè)。對(duì)于每個(gè)功能,我在 Views 中做了一個(gè)單獨(dú)的任務(wù)。以下是其中一項(xiàng)任務(wù)的示例:task_robots_url = q.enqueue(Robots(url).get_url)robots_url = task_robots_url.result現(xiàn)在我需要檢查模板中的工作是否完成。完成后,顯示結(jié)果。我想每秒檢查一次 JS 是否完成了工作。如果尚未完成 - 向用戶顯示“正在加載...”消息。如果完成 - 顯示結(jié)果。這是我的 JS 代碼: <script> var h1 = document.getElementById("h1"); var job_result = "{{ robots_url }}" var test = function () { if (job_result == "") { h1.innerText = "Waiting..."; } else if (job_result == "None") { h1.innerText = "Waiting ..."; } else if (job_result == undefined) { h1.innerText = "Waiting ..."; } else { clearInterval(inter); h1.innerText = job_result; } } var inter = setInterval(test, 1000); </script>但這不起作用。當(dāng)結(jié)果頁面開始時(shí) - 我有一個(gè)空的結(jié)果。它顯示等待。然后我沒有結(jié)果。它仍然顯示等待。但是現(xiàn)在等待之后沒有結(jié)果。在 Python RQ 的文檔中,據(jù)說我應(yīng)該在我的代碼中放置幾秒鐘的 time.sleep()。如果我把 time.sleep(2) - 我得到了結(jié)果。但是,如果我為我的 50 個(gè)函數(shù)中的每一個(gè)添加 time.sleep(2) - 我將得到 100 秒。Heroku中的限制只有30秒......所以我需要在沒有sleep()的情況下檢查并顯示結(jié)果......
1 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
setInterval() 方法以指定的時(shí)間間隔(以毫秒為單位)調(diào)用函數(shù)或計(jì)算表達(dá)式。
setInterval() 方法將繼續(xù)調(diào)用該函數(shù),直到調(diào)用 clearInterval() 或關(guān)閉窗口。
您多次調(diào)用 setInterval 最終導(dǎo)致瀏覽器崩潰。
假設(shè) job_result 值在 10 秒后發(fā)生變化,您可以編寫以下代碼:
var job_result = {{ job_result }};
var loadingMessage = function (){
if (!job_result) {
document.write("Loading ...");
}
else {
return
}
}
setInterval(() => loadingMessage, 1000);
您可以調(diào)用 return 以停止運(yùn)行間隔,也可以使用 setTimeout 并調(diào)用清除間隔的函數(shù)
添加回答
舉報(bào)
0/150
提交
取消