Python中导入所需的时间
我想知道导入一个模块需要多少时间,不论是系统自带的模块还是自己定义的模块。
8 个回答
6
一种分析导入模块性能的方法是使用在 bzr 源代码中用到的 profile_imports 模块,具体可以参考这个链接:
# put those two lines at the top of your script
import profile_imports
profile_imports.install()
# display the results
profile_imports.log_stack_info(sys.stderr)
除了可以告诉你导入模块所花费的时间,这个模块还可以估算编译正则表达式所需的时间,而编译正则表达式通常是导致导入变慢的重要原因。
6
要知道一个导入操作需要多长时间,最简单的方法可能就是使用 timeit模块。
>>> import timeit
>>> t = timeit.Timer('import urllib')
>>> t.timeit(number = 1000000)
0.98621106147766113
比如说,导入urllib一百万次,花了不到一秒钟(在Macbook Pro上)。
我有一个主脚本,它会导入其他模块。我需要计算一下它花了多少时间。
如果你是想知道整个脚本执行的总时间,在Linux/OS X/Cygwin上,你可以用 time
命令来运行脚本,比如:
$ time python myscript.py
real 0m0.046s
user 0m0.024s
sys 0m0.020s
(记得,这个时间包括了所有Python解释器的启动时间,还有实际代码执行的时间,虽然这个时间通常很少)
另外一种可能更有用的方法是对脚本进行性能分析:
而不是用
$ python myscript.py
你可以用
$ python -m cProfile myscript.py
1059 function calls in 0.015 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.002 0.002 0.015 0.015 myscript.py:1(<module>)
[...]
我觉得命令行输出不太好读,所以我几乎总是使用 gprof2dot,它可以把性能分析的信息转成一个漂亮的图表:
$ python -m cProfile -o myscript.prof myscript.py
$ python gprof2dot.py -o myscript.dot -f pstats myscript.prof
$ dot -Tpng -o profile.png prof_runtest.dot -Gbgcolor=black
图片来源 (1429x1896px PNG): http://jrfonseca.googlecode.com/svn/wiki/gprof2dot.png (镜像)
34
从Python 3.7版本开始,新增了一个 -X importtime
选项。这个选项可以用来测量导入模块的时间。你只需要在运行你的脚本时加上这个选项,比如说 python -X importtime my_script.py
。
供参考: