1. 为什么选 py-spy?

你的自动化脚本涉及大量的 uiautomator2 网络请求和 OpenCV 计算。

  • 无侵入:不需要在代码里写一堆 start_time / end_time
  • 低开销:它是用 Rust 写的,直接读取进程内存栈,不会让你本就卡顿的脚本雪上加霜。
  • 穿透力:可以看到 C 扩展(OpenCV)的耗时。

2. 三板斧:安装与基础使用

安装

pip install py-spy

第一招:top 模式(查看当前“谁最火”)

就像 Linux 的 top 一样,实时看哪个函数正在疯跑。

sudo py-spy top --pid 302857
  • 重点关注 %Own:如果 multiple_find_picture%Own 很高,说明瓶颈在函数内部逻辑。
  • 重点关注 %Total:如果 cv2.matchTemplate%Total 很高,说明 OpenCV 计算压力大。

第二招:record 模式(生成“火焰图”)

这是你定位 inspect.stack() 问题的关键。

sudo py-spy record -o profile.svg --pid 302857 --duration 30
  • 怎么看?:浏览器打开 SVG,越宽的格子表示耗时越长
  • 看顶端:如果最顶端的格子是 inspect.stackre.search,说明你在做无意义的 CPU 浪费。

第三招:--native(查看底层 C 耗时)

如果你怀疑是 OpenCV 的问题,必须加这个参数:

sudo py-spy top --pid 302857 --native