如何在不修改用户代码的情况下超时使用cProfiler分析代码?

时间:2015-12-06 04:20:53

标签: python profiling cprofile

通常在我的工作中,我会编写代码来读取文件中的行,然后我一次处理这些行。

有时行处理很复杂且文件很长,例如,今天处理200行大约需要一分钟,文件中的总行数是175k。

我想知道我的代码的哪一部分花了很长时间,为此我决定在Python中使用cProfiler。

问题是我实际上无法运行整个代码,因为这需要太长时间,如果我在退出信号中途中断​​该过程,那么我cProfiler也会在没有生成报告和修改代码的情况下死掉经过一定的阅读后,只有前K行是令人讨厌的(因为我在工作中对不同类型的数据倾向于这种事情。)我想避免在可能的情况下为了分析而添加选项。

告诉cProfiler运行3分钟最简单的方法是什么,描述发生了什么,停止然后报告其结果?

1 个答案:

答案 0 :(得分:5)

步骤1:在探查器下运行脚本myscript.py 3分钟,将分析信息输出到文件prof。在Linux等上,您可以使用

执行此操作
timeout -s INT 3m python -m cProfile -o prof myscript.py

(注意:如果省略-s INT,则使用SIGTERM而不是SIGINT,这似乎适用于Python 2,但不适用于Python 3.)或者,在任何系统上,您都应该能够

python -m cProfile -o prof myscript.py

然后在3分钟结束时按Ctrl-C。

第2步:从prof文件中获取一些类似

的统计信息
python -c "import pstats; pstats.Stats('prof').sort_stats('time').print_stats(20)"