我正在嘗試創建專案
- 每 5 分鐘自動從網站上抓取資料并保存到資料庫中
- Flask 應用程式與用戶互動。用戶從資料庫請求資料
用于抓取資料的 python 腳本如下:
import os
import time
while True:
os.system(scrape.py)
time.sleep(5*60)
我最初嘗試在每次用戶請求資料時從網站上抓取資料。但我發現它的作業速度很慢。
所以現在我正在嘗試制作另一個 python 腳本,從網站上抓取資料并將它們自動保存到資料庫中。而燒瓶應用程式只需要從資料庫中獲取資料。
我的問題是,如何同時運行 python 腳本和燒瓶應用程式?或者有沒有更好的方法來處理這個問題?
uj5u.com熱心網友回復:
這兩個組件沒有理由在同一個行程中運行,甚至在同一個應用程式中運行。他們可以共享一些模塊(例如物件定義),但是您需要一個構建資料庫的批處理程序,以及一個為用戶請求提供服務的燒瓶應用程式。保持它們松散耦合,您將獲得許多好處,包括簡單性以及將來用其他組件替換一個組件的可能性。
因此,將您的專案設定為多個檔案,并為燒瓶應用程式創建一個執行點(檔案),為爬蟲創建一個執行點。
uj5u.com熱心網友回復:
使用multithreading,您可以使用一個執行緒來處理每五分鐘抓取一次資料,并使用另一個執行緒來處理燒瓶應用程式:
import threading
import os
import time
def scraping():
while True:
os.system(scrape.py)
time.sleep(5*60)
def start_flask_app():
#code
pass
t1 = threading.Thread(target=scraping)
t2 = threading.Thread(target=start_flask_app)
t1.start()
t2.start()
您應該將燒瓶應用程式包裝在一個函式中并將其作為執行緒的目標,然后您也可以啟動該執行緒以及該scraping執行緒。
有關multithreadingpython ( https://www.tutorialspoint.com/python/python_multithreading.htm )的更多資訊
uj5u.com熱心網友回復:
我認為 Flask-APScheduler 適合您的用例。
在您的主應用程式檔案中,設定一個調度程式(有關更多詳細資訊,請參閱https://viniciuschiele.github.io/flask-apscheduler/rst/usage.html)。
從您的主應用程式中匯入所述調度程式,并使用以下內容設定作業
@scheduler.task('interval', id='scrape_task', seconds=300)
def scrape():
# do stuff
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/411645.html
標籤:
