[英]Flask app regularly calling external function even when not in use
我正在編寫的應用程序包括定期抓取網站並將數據存儲在數據庫中,以查看其隨時間的變化。 為此,需要每天調用一次抓取函數。
使用time.sleep()
調用或任何類似的跟蹤時間的方法會劫持Flask應用程序,並使用戶無法更改他們正在查看的頁面。
我想出何時刮擦的唯一其他方法需要重新加載頁面:
@app.route("/")
def index():
if (time.time() - last_scrape) > 86400.0:
scrape()
last_scrape = time.time()
return render_template("index.html")
但是,此方法有兩個問題:
有什么方法可以每天可靠地更新抓取的信息,而不會損害應用程序的功能?
為什么需要在Flask視圖中進行刮擦?
設置一個單獨的過程來執行抓取並將詳細信息存儲在數據庫中。 此腳本可以很容易地由cron觸發,或者由您環境中可用的任何任務計划程序觸發。
然后在Flask應用程序中實現一個視圖,該視圖查詢數據庫並根據需要顯示所抓取的信息。
如果必須在Flask應用中實施抓取,請將其編寫為單獨的線程。 它將花費大部分時間處於睡眠狀態,並花費少量時間來抓取數據和更新數據庫。 重要的是,它不會阻塞運行Flask的主線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.