news 2026/4/16 12:38:46

一个小技巧轻松提升Dash应用debug效率

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个小技巧轻松提升Dash应用debug效率
更多Dash应用开发干货知识、案例,欢迎关注“玩转Dash”微信公众号👇

1 简介

大家好我是费老师。Dash作为基于Python进行全栈应用开发的流行框架,具有强大的可伸缩性——这意味着在同一套基于组件+回调函数的代码组织方式下,使用Dash可以轻松覆盖从小型简单应用,到大型复杂应用,各种复杂程度的应用开发任务。这也是Dash在世界范围内,被众多的大公司用于持续开发企业级数据应用的原因之一。

而随着所开发的Dash应用功能日益增长,我们则需要学习如何在应用开发过程中,更高效准确调试应用功能逻辑定位异常问题所在

今天的文章中,我们就来一起学习新版本Dash(>=3.4.0版本)中增加的一些功能特性,帮助我们更精准快速的定位常见回调函数开发问题。

2 在回调图中用hidden和hide_all_callbacks参数聚焦回调函数

虽然我之前在公众号玩转Dash知识星球等平台发布的文章和课程中,并没有专门做过介绍,但很多同学应该对类似下面的界面有印象:我们在Dash应用开发阶段,为app.run()设置debug=True开启开发调试模式后,通过点击右下角开发模式工具条中的Callbacks按钮,可以展开一套可交互的有向图,我们可以将其称作回调图

默认情况下,它记录并呈现当前Dash应用中全部的回调函数编排关系,这对于小型Dash应用很直观明了,因为图中的节点比较少。但是对于页面众多、功能逻辑众多的中大型Dash应用来说,当你打开回调图时,看到的可能是下面这样庞大复杂的景象:

😅这种情况下我们大概率会当做什么都没看见,默默的关闭回调图面板。。。

那么有没有办法在这个回调图中默认不展示全部回调关系,只针对目前关注的部分回调函数进行展示呢?

有的兄弟,有的,首先我们直接将Dash升级到>=3.4.0版本:

/* by yours.tools - online tools website : yours.tools/zh/txtcount.html */ pip install dash -U

以实现“拼接两个输入框内容”的简单应用功能为例:

/* by yours.tools - online tools website : yours.tools/zh/txtcount.html */ import dash from dash import html import feffery_antd_components as fac from dash.dependencies import Input, Output from feffery_dash_utils.style_utils import style app = dash.Dash(__name__, suppress_callback_exceptions=True) app.layout = html.Div( [ fac.AntdSpace( [ fac.AntdInput(id="input1", placeholder="请输入内容"), fac.AntdInput(id="input2", placeholder="请输入内容"), fac.AntdText(id="output-texxt"), ] ) ], style=style(padding=50), ) @app.callback( Output("output-text", "children"), Input("input1", "value"), Input("input2", "value"), ) def combine_inputs(input1, input2): """拼接输入的内容""" return "拼接结果:" + (input1 or "") + (input2 or "") if __name__ == "__main__": app.run(debug=True)

在上面的示例代码中,我们“不小心”地把用于显示拼接内容结果的组件id参数写成了output-texxt🤯,这也是比较常见的导致回调函数不生效的原因之一:

这种情况下,当我们在浏览器中发现相关功能没有如期运作时:

就可以优先考虑通过回调图查看对应回调函数的执行情况,可以看到虽然我们在相关输入框里输入了一些内容,但对应的回调函数一次都没执行(count 0):

这种情况下,我们首先就可以想到是不是对应回调函数中有Output角色的id,与对应组件定义的id参数不一样,经过修正,功能正确运作的情况下,在回调图结果中就可以看到该回调函数执行了多少次执行耗时等有用的信息:

此时,我们再联想到上文中展示过的,对应中大型Dash应用的非常庞杂的回调图,假如上面这个回调函数debug的场景出现在类似规模的应用中,我们就可以基于Dash>=3.4.0版本,首先在app.run()中设置hide_all_callbacks=True,这将在回调图中强制隐藏所有的回调函数:

然后再为对应的回调函数callback()中设置hidden=False

这将以更高的优先级,在回调图中强制展示当前回调函数关系,这样无论是再复杂的Dash应用,我们都可以在回调图中只聚焦于我们关注的那些回调函数,大幅度提升应用功能调试效率🚀:

大家可以在日常开发Dash应用的过程中,多多利用今天介绍的技巧,开发出更稳健的应用💪~


更多有关Dash应用开发的干货内容,欢迎持续关注我们❤️

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:26:51

Zephyr学习之PWM方式驱动LED灯记录

前言 继Zephyr学习之点亮LED文章。本次使用的示例工程blinky_pwm驱动的引脚为PF9 工程复制并打开项目 参考提供的设备树文件的PWM节点编写规则 找到我们这边使用的pf9对应的引脚定义 编写设备树覆盖配置文件 / {// 选择系统控制台和 shell UART 设备chosen {// 指定系统控制…

作者头像 李华
网站建设 2026/3/27 19:02:20

从中心化到混合架构:数字资产交易所的技术革命与生态重构

引言:一场静默的金融基础设施革命当全球数字资产市值突破5万亿美元大关,当Coinbase单日交易量超越纽约证券交易所,当Solana链上衍生品合约规模直追传统金融市场——这场由区块链技术驱动的金融革命,正在重塑人类社会的价值交换方式…

作者头像 李华
网站建设 2026/4/12 8:03:44

2.运放选型调试方法论

一般学习过模电的同学,懂负反馈、虚短虚断、会计算,但是还是不会具体应用。接下来先根据需求锁定关键参数,再通过规范调试排除问题。一、 运放选型:从需求出发,按优先级筛选参数选型的核心是 **“按需取舍”—— 没有万…

作者头像 李华
网站建设 2026/4/16 10:43:53

基于STM32单片机汽车防盗报警GSM短信GPS北斗定位地图APP设计37(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码**

基于STM32单片机汽车防盗报警GSM短信GPS北斗定位地图APP设计37(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 STM32单片机电动车防盗报警GSM短信上报GPS定位37 产品功能描述: 本系统由STM32F103C8T6单片机核心板、…

作者头像 李华
网站建设 2026/4/16 11:18:44

SpringBoot学习:整合Quartz实现定时任务

在应用开发中,经常会遇到需要定时执行操作的场景,例如日志清理、邮件发送、订单处理等。SpringBoot支持多种定时任务实现方式,包括Timer、ScheduledExecutorService、SpringTask、Quartz以及xxljob等。本文将重点介绍如何使用Quartz框架实现可…

作者头像 李华
网站建设 2026/4/16 7:46:28

Kubernetes平滑部署全景实战指南

在Kubernetes中实现平滑部署(亦称无损发布或零宕机部署)的核心原理在于:必须确保新Pod已启动并通过就绪检查、能够接收流量后,再终止旧Pod。若这一顺序被打破,则可能引发服务闪断、请求丢失或短暂不可用。 一、实现平…

作者头像 李华