6

在我的工作中,我经常编写代码来读取文件中的行,并且一次处理这些行。

有时候行处理比较复杂,文件比较长,比如今天处理200行大概需要一分钟,文件总行数是175k。

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

问题是我实际上无法运行整个代码,因为那会花费太长时间,如果我在退出信号中途中断​​进程,那么我的 cProfiler 也会死掉,而不会生成报告并使用逻辑修改代码以在一定时间后死掉只阅读前 K 行很烦人(因为我在工作中经常针对不同类型的数据做这种事情。)如果可能的话,我想避免仅为了分析而添加选项。

告诉 cProfiler 运行 3 分钟、分析发生的情况、停止然后报告其发现的最干净的方法是什么?

4

1 回答 1

6

第 1 步:在分析器下运行您的脚本myscript.py3 分钟,将分析信息输出到文件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)"
于 2017-02-13T14:39:23.620 回答