lazy import 和全局域/函数域的变量,实例定义。

2025 年 4 月 2 日 星期三(已编辑)
3
这篇文章上次修改于 2025 年 4 月 2 日 星期三,可能部分内容已经不适用,如有疑问可询问作者。

lazy import 和全局域/函数域的变量,实例定义。

说结论

lazy import : 在函数内(在使用时) 导入使用到的 package。

优点: 在 main 函数 import 其他文件时,不会在 import 处卡太久。

缺点: 对于批处理频繁调用的函数,它总是需要额外导入的时间。(这个有时候长达三四秒)

权衡点在于是否具有 GUI 界面,以及是否属于高频调用。

高频调用全局定义变量和导入。

低频次函数较好的习惯是在使用时导入和定义初始化

对于 GUI 界面(你不希望每次切换页面的时候响应长达三四秒),尽可能地优化交互体验为主。即使是高频次批处理,我们也应该优先考虑用户交互响应速度。(使用时导入)

即使会多写很多行代码,也依然应该考虑函数内定义。

因为性能就是一个积少成多的过程,原本 python 就不快,如果再不考虑性能,那只会让人难以忍受。

原因

Streamlit 的运行逻辑是通过频繁从头到尾地运行整个脚本。

而在顶部的 import ,我在一些 util 里面凑齐了四巨头(torch, numpy , pandas, funasr )。导致首次进入那个页面都会加载四五秒 =-= 。优化后几乎没有延迟,相当于把加载时间挪到了处理时间。但交互体验优先级应该最高。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...