把代码放到不同的函数中并用下面的装饰器包裹即可在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. OpenStack 全套搭建部署指南(基于 Kolla-Ansible)

    一.环境准备 1. 硬件要求 控制节点:至少 4 核 CPU,8GB 内存,100GB 磁盘(推荐 SSD). 计算节点:根据虚拟机需求调整,建议 8 核 CPU,16GB 内存,200GB+ 磁盘. ...

  2. CUDA 线程ID 计算方式

    thread ID 的计算方式,简单来说很像小学学的除法公式,本文转载自同学一篇博客:并进行简单修改: 被除数 = 除数 * 商 + 余数 用公式表示:$$线程Id = blockId * block ...

  3. 深入理解微服务架构:银弹 or 焦油坑?

    极客时间:<从 0 开始学架构>:深入理解微服务架构:银弹 or 焦油坑? 微服务与 SOA 的关系 SOA和微服务的关系和区别,可分为以下几种典型的观点: 微服务是 SOA 的实现方式 ...

  4. Seata源码—5.全局事务的创建与返回处理

    大纲 1.Seata开启分布式事务的流程总结 2.Seata生成全局事务ID的雪花算法源码 3.生成xid以及对全局事务会话进行持久化的源码 4.全局事务会话数据持久化的实现源码 5.Seata Se ...

  5. 通过COM,用Python调用C#库

    1.C#配置 (1)类库 (2)COM互操作打勾 (3)代码中类必须要有无参构造函数,否则不会注册成功!!! using System; using System.Runtime.InteropSer ...

  6. C# 定时器 Timer 如何精确到 1-2 毫秒以内

    最近在排查项目OTA的一个问题,触发了一毫秒或者2毫秒执行一次进程间通信的,导致通信阻塞的问题.这样就需要用到模拟触发1ms或者2ms触发事件.这让我第一时间想到了C#的定时器.由于我们项目用到的框架 ...

  7. Windows下使用Qt复制文件夹(xcopy,非QFile)

    Windows下使用Qt复制文件夹(xcopy,非QFile) .h文件 #ifndef CXCOPY_H #define CXCOPY_H #include <QWidget> #inc ...

  8. ODOO产品介绍

    自己整理的odoo15产品介绍资料,内容供参考,需要ppt的请联系: 欢迎技术交流.项目合作 !    

  9. windows环境下的常用命令

    1.appwiz.cpl 程序和功能 2.certmgr.msc 证书管理实用程序 3.control 控制面板 4.firewall.cpl 防火墙 5.fsmgmt.msc 共享文件夹管理器 6. ...

  10. 使用Spring Boot 优雅地发送邮件

    1.前言        在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册账号,通过邮件找回账号密码等:又比如通过邮件发送系统运行情况,通过邮件发送报表信息,给用户发送营销信息等等,实际应 ...