问题标签 [pstats]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
75 浏览

python - Python脚本长执行函数

您好,我遇到了一个问题,即我的脚本中的一个函数需要很长时间才能执行。所以我正在尝试优化代码,我目前正在为此使用 cProfile 和 Pstats。

当我执行一个函数时,大约需要 0.7 秒到 1+ 秒才能完成。在 Windows 上总是给出最长持续时间的项目是:

在 Linux 上:

所以我会假设它必须对线程做一些事情,但我从不创建任何线程,而我的其他函数几乎不需要时间来完成,比如 ~0.1 秒,所以我的问题是为什么要花这么长时间来执行这段代码:

CProfile 的完整日志: https ://pastebin.com/jAA5FkPZ

完整代码: https ://gist.github.com/Patrick265/592a7dccba4660a4e4210ddd5e9974eb

0 投票
1 回答
266 浏览

python - 为什么 pstats.print_callers() 忽略了限制参数?

我正在尝试使用cProfile和显示结果来分析我的 python 脚本pstats。特别是,我正在尝试使用该pstats函数p.sort_stats('time').print_callers(20)按时间仅打印前 20 个函数,如文档中所述。

我希望只获得前 20 个结果(按时间排序的函数及其调用函数),相反,我得到一个看似未经过滤的 1000 多个函数列表,这些函数完全使我的终端饱和(因此我估计超过 1000 个函数)。

为什么我的限制参数(即20)被忽略,print_callers()我该如何解决这个问题?

我已经尝试查找答案,但找不到。我试图创建一个最小的可重现示例,但是当我这样做时,我无法重现该问题(即它工作正常)。

我的分析代码是:

我试图避免发布我的完整代码,所以如果其他人以前遇到过这个问题,并且可以在没有看到我的完整代码的情况下回答,那就太好了。

非常感谢您提前。

编辑 1: 部分输出: