Python Streamlit 缓存数据

问题描述 投票:0回答:1

我使用 Streamlit 在 Python 中开发了一个用户交互式仪表板。但是,我不确定我的代码的某些方面。本质上,该仪表板提供了支付和运送产品未来五个月的收入和交易数量预测。为了实现这一目标,它依赖于每月训练和更新的机器学习模型。为了确保仪表板定期更新,我必须清除上个月的缓存数据。虽然我有一个带有线程的解决方案(检查下面的代码段),但我不确定它是性能效率最高的解决方案。这个想法是让一个进程在后台运行。我也考虑过使用 asyncio,尽管我缺乏这方面的经验。您能否提供一些提示或想法来增强我的代码?我也感觉到这可能不是最专业的方法,即缺少一些 OOP 编程......

谢谢你

logging.getLogger().setLevel(logging.INFO)
 
 @st.cache_data()
 def load_model():
     mlflow_client = mlflow_manager.MLFlowManager(experiment_id, bucket_name, mlflow_url)
     mlflow_client.download_artifacts(sub_experiment="atv", destination_folder="data")
     model_tx = mlflow_client.get_model("ps_monthly_forecast_num_txs")
     model_atv = mlflow_client.get_model("ps_monthly_forecast_atv")
     return model_atv, model_tx
 
 
 def refresh_cache():
     while True:
         current_date = datetime.now()
         target_date = (current_date.replace(day=1) + relativedelta(months=1)).replace(
             day=10, hour=7, minute=0, second=0, microsecond=0
         )
         time_difference = target_date - current_date
         seconds_until_target = time_difference.total_seconds()
         time.sleep(seconds_until_target)
         st.cache_data.clear()
 
 
 def main():
     if "is_running" not in st.session_state:
         st.session_state.is_running = True
         thread = threading.Thread(target=refresh_cache)
         thread.start()
python multithreading streamlit
1个回答
0
投票

Streamlit 允许您在 st.cache_data 中本地处理这个问题。您可以在调用中添加一个 ttl 参数。

https://docs.streamlit.io/library/api-reference/performance/st.cache_data

© www.soinside.com 2019 - 2024. All rights reserved.