Python中导入所需的时间

31 投票
8 回答
15560 浏览
提问于 2025-04-15 11:10

我想知道导入一个模块需要多少时间,不论是系统自带的模块还是自己定义的模块。

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

enter image description here

图片来源 (1429x1896px PNG): http://jrfonseca.googlecode.com/svn/wiki/gprof2dot.png (镜像)

34

从Python 3.7版本开始,新增了一个 -X importtime 选项。这个选项可以用来测量导入模块的时间。你只需要在运行你的脚本时加上这个选项,比如说 python -X importtime my_script.py

供参考:

撰写回答