作者NoLoveNoMore (不要阿~~)
看板Python
標題[問題] Dash callback 取用資料疑問
時間Wed Mar 6 13:19:01 2024
先說我是自學的
目前用 Dash 寫了一個 盤中股票監控的 WEB APP
其中有一個 function
def get_realtime_data():
quotes = ...
data = pd.concat([self.old, quotes]).sort_index()
return data
是將歷史資料與最新的盤中報價合在一起
每1分鐘會跑一次這個 function
這個 function 約需要跑 10 秒(還有其他細項算均線等)
但是如果其他 components 在這十秒鐘需要用到這個 data 時
整個 APP 就需要等待10秒到獲取最新DATA才會繼續
要如何解決?
目前想法是,用另外一個如 realtime.py 檔將這個 function 放在 realtime.py 中
也是每 N 秒跑一次 function 並將 data 存成 pkl 檔
而 Dash 直接 read 這個 pkl 檔不須再做運算
應該是可行,但如此頻繁存取檔案,會不會對硬碟有影響?
這個檔案大概 200mb,也就是每 N 秒就要刪除重建一次這個檔案
另外還有用 SQL 資料庫
但因為我是自學的 SQL完全不懂
不知還有沒有更好的方式避免 dash run 這個 function 時不要當掉?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.169.19 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1709702343.A.17A.html
1F:→ lycantrope: multiprocess+queue或async 03/06 13:33
2F:推 ddavid: multi-threading? 03/06 15:30
3F:→ f416720001: 沒用過dash 但這需求需要的是要有地方儲存吧,sql存 03/08 21:01
4F:→ f416720001: 個資料吧 03/08 21:01
問了chatgpt 後目前用了以下
import threading
class WebApp:
def __init__(self):
self.realtime_process = RealtimeProcess()
self.start_background_thread()
def start_background_thread(self):
thread = threading.Thread(target=self.update_data)
thread.daemon = True # 设置为守护线程,确保主程序退出时可以关闭
thread.start()
def update_data(self):
while True:
self.quotes = self.realtime_process.realtime_quotes()
self.data = self.realtime_process.realtime_data(self.quotes)
self.dgroups_data, self.dgroups_stocks = (
self.realtime_process.realtime_dgroups_data(self.quotes)
)
sleep(60)
這樣是可以運行沒錯
但是我在檢查時為何self.realtime_process.realtime_quotes()
getting data 2024-03-09 09:19:26.535743
getting dgroups_data 2024-03-09 09:19:26.536059
getting quotes 2024-03-09 09:20:24.959123
getting quotes 2024-03-09 09:20:26.716042
getting data 2024-03-09 09:20:27.876317
getting dgroups_data 2024-03-09 09:20:27.876640
我應該是要每60秒運行一次
但是他卻運行了兩次
因為 self.realtime_quote 是要連接到永豐金API
運行兩次很快就把流量額度用完了
會是什麼問題呢?
已檢查過其他地方沒有用到 update_data
※ 編輯: NoLoveNoMore (59.115.76.99 臺灣), 03/09/2024 09:24:20
5F:→ lycantrope: 寫一個function每60秒跑一次,有這麼複雜w 03/09 12:58