把代码放到不同的函数中并用下面的装饰器包裹即可在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情况的更多相关文章

  1. 《Focus On 3D Terrain Programming》中一段代码的注释一

    取自<Focus On 3D Terrain Programming>中的一段: //--------------------------------------------------- ...

  2. 《Focus On 3D Terrain Programming》中一段代码的注释三

    取自<Focus On 3D Terrain Programming>中的一段: //--------------------------------------------------- ...

  3. 《Focus On 3D Terrain Programming》中一段代码的注释二

    取自<Focus On 3D Terrain Programming>中的一段: bool CTERRAIN::MakeTerrainFault( int iSize, int iIter ...

  4. bootstrap 中这段代码 使bundles 失败

    _:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time& ...

  5. SQL SERVER中如何查找存储过程中一段代码

    select b.name ,a.text from syscomments a,sysobjects b where and object_id(b.name)=a.id and b.xtype i ...

  6. 怎么知道RTL Schematic中的instance与哪段代码对应呢

    2013-06-23 20:15:47 ISE综合后可以看到RTL Schematic,但我们知道在RTL编码时,要经常问自己一个问题“我写的这段代码会综合成什么样的电路呢”.对于一个简单的设计,比如 ...

  7. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  8. c# winform中的一段代码赏析

    我遇到了一个bug,是客户测试我们的产品,报出来的,而且有异常信息文件,这对于定位问题,很有帮助. 我找到源码看了下,bug还无法重现.于是我随便点点客户端,经过了几次调试,结果报出错误来了.客户端界 ...

  9. js中闭包来实现bind函数的一段代码的分析

    今天研究了一下bind函数,发现apply和call还可以有这样的妙用,顺便巩固复习了闭包. var first_object = { num: 42 }; var second_object = { ...

  10. C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)

    一般来说,我们需要在开发应用软件的配置文件中,添加一些参数,用于后续用户根据实际情况,自行调整. 配置参数,可以放在配置文件中.环境变量中.或数据库表中(如果使用了数据库的话).通常,配置数据,以 k ...

随机推荐

  1. js 获取缓存渲染到页面里面

    $('#code').change(function(){ console.log($(this).val()) localStorage.setItem("code",JSON. ...

  2. 微信支付功能的设计实现与关键实践(UniApp+Java)全代码

    感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料.技巧!!! 温馨提醒:阅读时可打开导航栏 概述 在移动互联网时代,支付功能已成为应用开发的核心能力之一. ...

  3. 牛逼,这款开源聊天应用竟能一键召唤多个AI助手,跨平台通话神器!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 JiwuChat是一款基于Tauri2和Nuxt3构建的轻量化多平台即时通讯工具,仅约8MB ...

  4. net core mvc6使用jwt实现简单的登录

    创建一个新的.NET Core Web应用程序项目.在创建项目时,选择MVC模板. 在项目中添加Microsoft.AspNetCore.Authentication.JwtBearer包: 在Vis ...

  5. Python内置库itertools简单学习

    该库为满足特定需要的比较高效的迭代器内置库,在数据科学中的应用也不少,故有必要了解一下: import itertools import sys 无限迭代器(Infinite iterators) I ...

  6. 高德地图 MCP,可用 Java SolonMCP 接入(支持 java8, java11, java17, java21)

    1.MCP技术概述 1.1 什么是 MCP MCP (Model Control Protocol) 是一种允许大模型与外部工具交互的协议,高德地图基于此协议提供了地图服务能力,使 AI 大模型能够直 ...

  7. linux下用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp

    用android-file-transfer-linux替换掉 gvfs-mtp来挂载mtp 问题现状 在我使用gvfs-mtp挂载的时候,无论读取文件还是获取对应文件夹下所有文件的路径等操作,都非常 ...

  8. 5 MyBatis动态sql中foreach标签的使用

    1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...

  9. 设置IntelliJ IDEA 2021字体大小

      安装Mac版 IntelliJ IDEA 2021.3.1 (Ultimate Edition)后,就需要更改字体.IntelliJ IDEA的字体设置分为两部分:一部分是UI的字体和字号设置,另 ...

  10. manim边做边学--显函数图像

    在Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像. FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解 ...