作者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/cn.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