有兩種不同的服務。一個服務 -Django 從前端獲取請求,然后呼叫另一個服務 -Flask 中的 API。
但是 Flask 服務的回應時間很長,如果用戶導航到另一個頁面,該請求將被取消。
它應該是后臺任務還是發布/訂閱模式?如果是這樣,如何在后臺做然后告訴用戶這里是你最后的結果?
uj5u.com熱心網友回復:
您有兩個可能的主要選擇:
向 Django 的“簡單”視圖發出初始請求,該視圖加載帶有微調器的骨架 HTML 頁面,其中一些 JS 將觸發 XHR 請求到第二個 Django 視圖,該視圖將包含其他服務 (Flask) 呼叫。因此,您甚至可以正確地提醒用戶加載需要時間并在瀏覽器端處理退出(在離開/中止請求之前詢問確認......)
如果可能,快取 Flask 服務的結果,這樣你就不需要在每次頁面加載時呼叫它。
您可以通過在異步請求中呼叫服務并快取其結果來組合這兩種解決方案(例如,根據背景關系,您可能需要根據連接的用戶自定義快取)。第一個解決方案可以通過 pub/sub、websockets 等方式拒絕,但經典的 XHR 似乎適合您的情況。
uj5u.com熱心網友回復:
在我們的專案中,我們有幾個耗時的端點。我們的解決方案類似于之前的答案:一旦我們收到請求,我們就會呼叫 Celery 任務,該任務以異步模式執行其昂貴的作業。我們不會等待其結果并快速回應用戶。Celery 任務通過 WebSockets 將其進度/結果發送給用戶。前端處理這個 WS 訊息。這種方法的好處是我們不會花費后端的 CPU。我們花費了在另一臺機器上運行的 Celery 工人的 CPU。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364363.html
