【发布时间】:2016-04-17 18:43:41
【问题描述】:
有没有办法找出 Python 中哪些导入耗时最长?查看python -m cProfile <script> 的输出,它似乎不包括import 语句(可以理解给定潜在的巨大依赖树)。最初我认为它确实如此,因为我看到一行 __import__() 调用,但我认为这实际上可能是因为某处的代码明确调用它,只有 import 语句的玩具程序没有一行。
现在我只是在使用:
start = time.time()
import <module>
print '%s / time: %f' % (<module>, time.time()-start)
围绕每个模块,但它不会递归地分析它以查看导入中的哪个导入可能会增加时间。
【问题讨论】:
-
为什么需要分析导入?它们只发生一次,要么你需要它们,要么你不需要它们。
-
如果您正在寻找导入系统中的瓶颈,那您就找错地方了。
-
要添加到其他 cmets,如果您看到需要时间的导入,那是因为您在这些文件中的代码不在类/函数定义内且不受 @987654327 保护@ 除非有严格的需求,否则您可以将此代码放在
init()之类的内容中并对其进行概要分析。不保护此代码也会导致每次导入该文件时都会运行代码。 -
@danielu13 这就是我的问题的意图,找出哪些导入进行了大量初始化(一个需要 22 秒)。虽然对总运行时间来说一点也不重要,但我很好奇那个时间是从哪里来的。
-
这是一个庞大的代码库,具有很大的依赖树,因此仅找到要重构的初始化代码会很困难。您不必担心重复导入,Python 只初始化一次导入 (stackoverflow.com/a/296062/873472)。
标签: python profiling python-import