通常在工作期间,我编写代码以从文件中读取行,然后一次处理这些行。
有时,行处理很复杂且文件很长,例如,今天处理200行需要大约一分钟的时间,文件中的总行数为175k。
我想弄清楚我的代码的哪一部分要花很长时间,为此,我决定在Python中使用cProfiler。
问题是我实际上无法运行整个代码,因为这将花费很长时间,并且如果我在退出信号中途中断了该过程,那么我的cProfiler也将死掉,而不会生成报告并修改逻辑以使代码在确定的时间内死掉仅读取前K行很烦人(因为我经常在工作中针对不同类型的数据进行此类操作。)我想避免仅出于分析目的而添加选项。
告诉cProfiler运行3分钟,分析发生的情况,停止然后报告其发现,最干净的方法是什么?
步骤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)"