簡體   English   中英

Flask應用程序即使不使用也會定期調用外部函數

[英]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")

但是,此方法有兩個問題:

  1. 為了定期抓取,該應用程序要求有人幾乎不停地導航到頁面。
  2. 時間到了並且調用了scrape函數之后,導航到該頁面的任何人都必須等待該函數調用完成后才能加載頁面。

有什么方法可以每天可靠地更新抓取的信息,而不會損害應用程序的功能?

為什么需要在Flask視圖中進行刮擦?

設置一個單獨的過程來執行抓取並將詳細信息存儲在數據庫中。 此腳本可以很容易地由cron觸發,或者由您環境中可用的任何任務計划程序觸發。

然后在Flask應用程序中實現一個視圖,該視圖查詢數據庫並根據需要顯示所抓取的信息。

如果必須在Flask應用中實施抓取,請將其編寫為單獨的線程。 它將花費大部分時間處於睡眠狀態,並花費少量時間來抓取數據和更新數據庫。 重要的是,它不會阻塞運行Flask的主線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM