分析 Python cProfile 与 unix 时间

Posted

技术标签:

【中文标题】分析 Python cProfile 与 unix 时间【英文标题】:Profile Python cProfile vs unix time 【发布时间】:2011-09-23 01:17:32 【问题描述】:

我正在分析一个 python 代码;为什么它会在用户空间中花费更多时间?

 

     user@terminal$ time python main.py 

     1964 function calls in 0.003 CPU seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.003 0.003 :1() 1 0.000 0.000 0.000 0.000 ConfigParser.py:218(init) 1 0.000 0.000 0.001 0.001 ConfigParser.py:266(read) 30 0.000 0.000 0.000 0.000 ConfigParser.py:354(optionxform) 1 0.000 0.000 0.000 0.000 ConfigParser.py:434(_read) 15 0.000 0.000 0.000 0.000 ConfigParser.py:515(get) 15 0.000 0.000 0.000 0.000 ConfigParser.py:611(_interpolate) 15 0.000 0.000 0.000 0.000 ConfigParser.py:619(_interpolate_some) 1 0.000 0.000 0.000 0.000 config.py:32(read_config_data) 1 0.000 0.000 0.001 0.001 config.py:9(init) 6 0.000 0.000 0.000 0.000 entity.py:108(add_to_filter) 1 0.000 0.000 0.002 0.002 entity.py:24(init) 1 0.001 0.001 0.002 0.002 entity.py:39(create_inverted_index) 493 0.000 0.000 0.001 0.000 entity.py:80(beautify) 1 0.000 0.000 0.000 0.000 entity.py:84(create_bucket_lookup) 1 0.000 0.000 0.000 0.000 main.py:15() 2 0.000 0.000 0.000 0.000 main.py:18() 1 0.000 0.000 0.003 0.003 main.py:23(main) 1 0.000 0.000 0.000 0.000 main.py:9(get_bag_of_words) 19 0.000 0.000 0.000 0.000 built-in method group 34 0.000 0.000 0.000 0.000 built-in method match 1 0.000 0.000 0.000 0.000 isinstance 2 0.000 0.000 0.000 0.000 len 28 0.000 0.000 0.000 0.000 method 'append' of 'list' objects 1 0.000 0.000 0.000 0.000 method 'close' of 'file' objects 15 0.000 0.000 0.000 0.000 method 'copy' of 'dict' objects 1 0.000 0.000 0.000 0.000 method 'disable' of '_lsprof.Profiler' objects 15 0.000 0.000 0.000 0.000 method 'find' of 'str' objects 19 0.000 0.000 0.000 0.000 method 'isspace' of 'str' objects 24 0.000 0.000 0.000 0.000 method 'join' of 'str' objects 49 0.000 0.000 0.000 0.000 method 'lower' of 'str' objects 20 0.000 0.000 0.000 0.000 method 'readline' of 'file' objects 6 0.000 0.000 0.000 0.000 method 'replace' of 'str' objects 24 0.000 0.000 0.000 0.000 method 'rstrip' of 'str' objects 47 0.000 0.000 0.000 0.000 method 'split' of 'str' objects 9 0.000 0.000 0.000 0.000 method 'startswith' of 'str' objects 1030 0.000 0.000 0.000 0.000 method 'strip' of 'str' objects 15 0.000 0.000 0.000 0.000 method 'update' of 'dict' objects 2 0.000 0.000 0.000 0.000 method 'write' of 'file' objects 10 0.000 0.000 0.000 0.000 open 2 0.000 0.000 0.000 0.000 range 3 0.000 0.000 0.000 0.000 reduce

Done

real 0m0.063s user 0m0.050s sys 0m0.010s

虽然 cProfile 说它只用了 0.003 秒,但为什么 unix (sys) 时间说它在 0.01 秒内运行?

【问题讨论】:

【参考方案1】:

time(1)是衡量整个进程的执行时间,而profiler不包括Python解释器启动时间、字节码编译时间等。

【讨论】:

发生这种情况的任何原因? twitpic.com/5ha6qe 从某种意义上说,为什么 Python 在用户空间中花费更多时间?

以上是关于分析 Python cProfile 与 unix 时间的主要内容,如果未能解决你的问题,请参考以下文章

python性能分析--cProfile

python性能分析之cProfile模块

Python程序性能分析模块----------cProfile

是否有与 Python 的 cProfile 等效的 Julia 分析器?

调优工具python性能分析工具cProfiler

将 cprofile 与输入文件一起使用