监控Streamlit中每段代码的rerun情况
把代码放到不同的函数中并用下面的装饰器包裹即可在log中输出rerun次数。
依赖:
- loguru
import streamlit as st
from functools import wraps
from typing import Any, Callable
from loguru._logger import Logger
def run_counter(_func: Callable | None = None, *, logger: Logger | None = None):
"""
用法:
@run_counter # 无参
@run_counter() # 无参,显式括号
@run_counter(logger=logger) # 带参
"""
def decorator(func: Callable) -> Callable:
@wraps(func)
def wrapper(*args, **kwargs):
key = f"run_{func.__name__}"
st.session_state.setdefault(key, 0)
st.session_state[key] += 1
if logger is not None:
logger.debug(f"Rerun {func.__name__} ({st.session_state[key]})")
return func(*args, **kwargs)
return wrapper
# 1. 无参调用:@run_counter 或 @run_counter()
if _func is None:
return decorator
# 2. 带参调用:@run_counter(logger=logger)
return decorator(_func)
使用方法:
当成正常装饰器使用即可,需要放在streamlit的cache装饰器内部
@st.cache_resource
@run_counter(logger=log)
def get_model():
model = ChatOpenAI(
base_url=st.secrets["ollama_base_url"],
model="qwen3:0.6b",
api_key=st.secrets["ollama_api_key"],
)
return model
@run_counter(logger=log)
def init_app():
# 初始 session_state
init_session_state("messages", [])
init_session_state("context", [])
init_session_state("chat", [])
init_session_state("generating", False)
st.set_page_config(layout="wide", initial_sidebar_state="expanded")
监控Streamlit中每段代码的rerun情况的更多相关文章
- 《Focus On 3D Terrain Programming》中一段代码的注释一
取自<Focus On 3D Terrain Programming>中的一段: //--------------------------------------------------- ...
- 《Focus On 3D Terrain Programming》中一段代码的注释三
取自<Focus On 3D Terrain Programming>中的一段: //--------------------------------------------------- ...
- 《Focus On 3D Terrain Programming》中一段代码的注释二
取自<Focus On 3D Terrain Programming>中的一段: bool CTERRAIN::MakeTerrainFault( int iSize, int iIter ...
- bootstrap 中这段代码 使bundles 失败
_:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time& ...
- SQL SERVER中如何查找存储过程中一段代码
select b.name ,a.text from syscomments a,sysobjects b where and object_id(b.name)=a.id and b.xtype i ...
- 怎么知道RTL Schematic中的instance与哪段代码对应呢
2013-06-23 20:15:47 ISE综合后可以看到RTL Schematic,但我们知道在RTL编码时,要经常问自己一个问题“我写的这段代码会综合成什么样的电路呢”.对于一个简单的设计,比如 ...
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
- c# winform中的一段代码赏析
我遇到了一个bug,是客户测试我们的产品,报出来的,而且有异常信息文件,这对于定位问题,很有帮助. 我找到源码看了下,bug还无法重现.于是我随便点点客户端,经过了几次调试,结果报出错误来了.客户端界 ...
- js中闭包来实现bind函数的一段代码的分析
今天研究了一下bind函数,发现apply和call还可以有这样的妙用,顺便巩固复习了闭包. var first_object = { num: 42 }; var second_object = { ...
- C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)
一般来说,我们需要在开发应用软件的配置文件中,添加一些参数,用于后续用户根据实际情况,自行调整. 配置参数,可以放在配置文件中.环境变量中.或数据库表中(如果使用了数据库的话).通常,配置数据,以 k ...
随机推荐
- js 获取缓存渲染到页面里面
$('#code').change(function(){ console.log($(this).val()) localStorage.setItem("code",JSON. ...
- 微信支付功能的设计实现与关键实践(UniApp+Java)全代码
感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料.技巧!!! 温馨提醒:阅读时可打开导航栏 概述 在移动互联网时代,支付功能已成为应用开发的核心能力之一. ...
- 牛逼,这款开源聊天应用竟能一键召唤多个AI助手,跨平台通话神器!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 JiwuChat是一款基于Tauri2和Nuxt3构建的轻量化多平台即时通讯工具,仅约8MB ...
- net core mvc6使用jwt实现简单的登录
创建一个新的.NET Core Web应用程序项目.在创建项目时,选择MVC模板. 在项目中添加Microsoft.AspNetCore.Authentication.JwtBearer包: 在Vis ...
- Python内置库itertools简单学习
该库为满足特定需要的比较高效的迭代器内置库,在数据科学中的应用也不少,故有必要了解一下: import itertools import sys 无限迭代器(Infinite iterators) I ...
- 高德地图 MCP,可用 Java SolonMCP 接入(支持 java8, java11, java17, java21)
1.MCP技术概述 1.1 什么是 MCP MCP (Model Control Protocol) 是一种允许大模型与外部工具交互的协议,高德地图基于此协议提供了地图服务能力,使 AI 大模型能够直 ...
- linux下用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp
用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp 问题现状 在我使用gvfs-mtp挂载的时候,无论读取文件还是获取对应文件夹下所有文件的路径等操作,都非常 ...
- 5 MyBatis动态sql中foreach标签的使用
1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...
- 设置IntelliJ IDEA 2021字体大小
安装Mac版 IntelliJ IDEA 2021.3.1 (Ultimate Edition)后,就需要更改字体.IntelliJ IDEA的字体设置分为两部分:一部分是UI的字体和字号设置,另 ...
- manim边做边学--显函数图像
在Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像. FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解 ...