从 Python3.7 版本开始,新-X importtime选项可用。要测量导入时间,只需使用该选项执行脚本,例如python -X importtime my_script.py.
以供参考:
分析导入的一种方法是使用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)
Run Code Online (Sandbox Code Playgroud)
除了为您提供进口时间外,这也估计了编制正则表达式的时间,这通常是进口放缓的重要原因.
你可以测试这个运行
$ time python -c "import math"
Run Code Online (Sandbox Code Playgroud)
但是,这会对你有什么帮助?进口只发生一次,几乎永远不会成为瓶颈.反复导入同一模块的速度不会比导入一次慢得多,因为Python会跟踪哪些模块已经导入.
你究竟想要实现什么目标?
要了解导入需要多长时间,最简单的方法可能是使用timeit 模块..
>>> import timeit
>>> t = timeit.Timer('import urllib')
>>> t.timeit(number = 1000000)
0.98621106147766113
Run Code Online (Sandbox Code Playgroud)
因此,要导入 urllib 100 万次,只需要不到一秒钟的时间(在 Macbook Pro 上)。
我有一个导入其他模块的主脚本。我需要计算它需要多少时间
如果您指的是总脚本执行时间,在 Linux/OS X/Cygwin 上,您可以使用以下time命令运行脚本,例如:
$ time python myscript.py
real 0m0.046s
user 0m0.024s
sys 0m0.020s
Run Code Online (Sandbox Code Playgroud)
(请记住,这包括所有 Python 解释器启动时间,以及实际代码执行时间,尽管这是非常微不足道的数量)
另一种可能更有用的方法是分析脚本:
而不是运行你的代码
$ python myscript.py
Run Code Online (Sandbox Code Playgroud)
..你用..
$ 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>)
[...]
Run Code Online (Sandbox Code Playgroud)
我觉得命令行输出不是很容易阅读,所以我几乎总是使用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
Run Code Online (Sandbox Code Playgroud)