首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置文件Python导入时间

问配置文件Python导入时间
EN

Stack Overflow用户
提问于 2016-01-13 07:27:45
回答 3查看 3.8K关注 0票数 15

有没有办法找出哪些导入在Python中花费的时间最长?看一看python -m cProfile <script>的输出,它似乎不包括import语句(可以理解,考虑到潜在的巨大依赖树)。最初我认为是这样的,因为我看到了__import__()调用的一行,但我认为这实际上可能是因为某个地方的代码显式地调用了它,只有import语句的玩具程序没有它的一行。

现在我只是在使用:

代码语言:javascript
复制
start = time.time()
import <module>
print '%s / time: %f' % (<module>, time.time()-start)

在每个模块周围,但它不会递归地分析它,以查看导入中的哪个导入可能会导致时间膨胀。

EN

回答 3

Stack Overflow用户

发布于 2019-04-10 09:26:37

这是一个完全合法的问题。例如,尝试加速CLI应用程序的冷启动是有意义的。Python3.7现在提供了打印导入时间的选项:https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME

您可以运行以下命令:

代码语言:javascript
复制
python -X importtime myscript.py

或者:

代码语言:javascript
复制
PYTHONPROFILEIMPORTTIME=1 myscript.py

编辑:要查看这些结果,我推荐使用tuna。

票数 25
EN

Stack Overflow用户

发布于 2016-03-10 23:11:09

正如danielu13的评论中所述,您真正想要分析的是在导入此模块时在模块内执行的代码。

似乎cProfile在其输出中包含了在导入时执行的代码。它显示为模块级代码的<module>。许多包都是作为__init__.py文件导入的,因此gprof2dot会显示__init__:23:<module> (行号可能不同),它不会告诉您文件来自哪个包。

使用cprofilev,您可以找出哪些文件(以及软件包)占用的时间最多。

附带说明:分析导入实际上在某些情况下是有意义的。在我的系统上,导入模块networkx (https://networkx.github.io/)需要1.7秒。

票数 1
EN

Stack Overflow用户

发布于 2019-08-08 16:06:11

Python2.7的一个非常简单且没有层次结构的解决方案,它打印模块名称和自上一个模块以来的导入时间:

代码语言:javascript
复制
LAST_TIME = time.time()

class ImportHook(object):
    def find_module(self, fullname, path=None):
        global LAST_TIME
        cur_time = time.time()
        delta = cur_time - LAST_TIME
        long_time = '!!!!!!!!!!!!!!\n' * 10 if delta > 0.05 else ''
        print '%0.3f %s \n %s' % (delta, long_time, fullname),
        LAST_TIME = cur_time

import sys
sys.meta_path.insert(0, ImportHook())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34755728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档