我使用 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()
Streamlit 允许您在 st.cache_data 中本地处理这个问题。您可以在调用中添加一个 ttl 参数。
https://docs.streamlit.io/library/api-reference/performance/st.cache_data