我有一個生成速度極慢的 Python Flask 頁面。從外部API中拉取所有資料,在回傳頁面之前處理資料大約需要1分鐘。幸運的是,資料的有效期長達 1 小時,因此我可以快取結果并為大多數請求快速回傳快取的結果。
除了快取過期后的那一分鐘之外,這很有效。如果在那一分鐘內發出 10 個請求,將會有 10 次呼叫 veryslowpage() 函式,這會因外部 API 呼叫而占用 HTTPS 連接池,并因資料處理而占用記憶體,從而影響站點上的其他頁面. 是否有一種方法可以將此函式限制為單個實體,因此 10 個請求將只導致 1 次呼叫 veryslowpage() 而其余的等待快取結果準備好?
from flask import Flask, request, abort, render_template
from flask_caching import Cache
@app.route('/veryslowpage', methods=['GET'])
@cache.cached(timeout=3600, query_string=True)
def veryslowpage():
data = callexternalAPIs()
result = heavydataprocessing(data)
return render_template("./index.html", content=result)
uj5u.com熱心網友回復:
您可以簡單地創建一個函式,該函式定期從 API 獲取資料(每小時)并將其存盤在您的資料庫中。然后在你的路由函式中從你的資料庫而不是外部 API 中讀取資料。
更好的方法是創建一個非常簡單的腳本并在您的 app/init.py 中呼叫它(在另一個執行緒中),每隔一小時獲取資料并更新資料庫。
uj5u.com熱心網友回復:
您可以創建一個檔案或資料庫條目,其中包含您在不同執行緒中計算回應的資訊。然后,您的方法將檢查此類檔案是否存在,如果存在,則讓它等待并定期檢查回應。
您還可以每小時(或每 59 分鐘,如果重要的話)主動創建資料,以便您始終有可用的新回應。您可以為此使用 APScheduler 之類的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372055.html
