我有一個 python Flask 應用程式作為一個 azure web 應用程式,一個功能是一個計算密集型作業負載,需要超過 5 分鐘的時間來處理,是否有任何黑客通過保持客戶端和客戶端之間的 TCP 連接處于活動狀態來防止網關超時錯誤api 而函式正在處理資料?下面的當前代碼示例。
from flask import Flask
app = Flask(__name__)
@app.route('/data')
def data():
mydata = super_long_process_function()
# takes more than 5 minutes to process
return mydata
由于super_long_process_function需要超過 5 分鐘,所以它總是超時504 Gateway Time-out。我想提到的一件事是,這是 TCP 級別的空閑超時,這意味著如果連接僅處于空閑狀態且沒有發生資料傳輸,則只有達到此超時。所以在我們處理資料時,是否有任何可用于防止此超時的燒瓶中的黑客攻擊,因為根據我的研究和閱讀 Microsoft 檔案,無法更改 Web 應用程式的 230 秒限制。
uj5u.com熱心網友回復:
簡而言之:正如您所說,230 秒超時無法更改。
230 秒是請求在不向回應發送任何資料的情況下可以花費的最長時間。它是不可配置的。
來源:GitHub 問題
超時發生沒有回應。保持連接打開并發送資料無濟于事。
有幾種方法可以解決這個問題。這里有兩個可能的解決方案,您可以使用它來觸發長時間運行的任務,而不會出現超時問題。
- 僅使用 HTTP 呼叫觸發長時間運行的任務,但不要在回傳回應之前等待它們完成。
- 使用諸如Storage Queues或Service Bus 之類的訊息傳遞機制觸發任務。
要使用長時間運行的任務的結果更新 Web 應用程式,請考慮讓回應包含一個 URL,前端可以呼叫它來定期檢查任務完成情況,您的請求有一個回呼 URL,可在任務完成時呼叫,或者實作Azure Web PubSub以向客戶端發送狀態更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/375543.html
標籤:Python 天蓝色 烧瓶 网关 azure-webapps
