python - 从模块导入功能需要很长时间

标签 python python-2.7 time raspberry-pi scrapy

当我在 python 脚本中导入我自己编写的模块函数时,加载大约需要 6 秒。该函数仅包含大约 50 行代码,但由于尚未执行,所以这应该无关紧要,对吗?

这是加载函数的脚本:

#/usr/bin/env python

import time
print(time.clock())
from os import chdir
print(time.clock())
from os.path import abspath, dirname
print(time.clock())
from Project.controllers.SpiderController import RunSpider
print(time.clock())

输出如下:

0.193569
0.194114
0.194458
6.315348

我也尝试导入整个模块,但结果是一样的。

这可能是什么原因?

一些旁注:

  • 我使用 python 2.7.9
  • 模块使用scrapy框架
  • python 脚本在 Raspberry Pi 1 Model B 上运行

最佳答案

but that shouldn't even matter since it has not been executed yet right?

函数本身的代码没有执行,但是文件中的代码被执行了。这是合乎逻辑的,因为该文件可能包含装饰器、库调用、内部常量等。函数甚至可能是build(以便算法构造函数)。

from <module> import <item>您进行了几乎正常的导入,但您只创建了对该包中某项的引用。

因此,如果在模块中编写了一个程序(不在 if __name__ == '__main__': 范围内)或者当您导入大量额外的库时,可能需要很长时间。

例如可以构造一个函数:

def foo(x):
    return x + 5

def bar(y):
    return y * 2

def qux(x):
    return foo(bar(x))

如果您随后运行 from module import qux , 那么它首先必须定义 foobar , 自 qux取决于这些。

此外,虽然代码本身没有执行,但解释器将分析函数:它将源代码转换为语法树并进行一些分析(哪些变量是本地变量等)。

最后请注意,一个包裹通常有一个 __init__.py文件,初始化包。该文件也会被执行,并且也可能需要相当长的时间。例如,一些具有数据库连接的包将已经建立到该数据库的连接,并且在数据库响应连接之前可能需要一些时间。

关于python - 从模块导入功能需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44701451/

相关文章:

python - 为什么在 Windows 终端中用 Python 进行彩色打印不起作用?

python - 从python中的列表列表构造共现矩阵

python - 如何使用 Python 下载文件

python-2.7 - 删除嵌套列表Python中具有相同元素的重复元组

c - 不同整数大小的 GMP 时序差异;

python - 将文件转换为 HEX 字符串 Python

windows - 适用于 64 位 Windows 的 ZODB 3

python - 重构重复的全局字典初始化

php - NOW() 没有在 DB : off by 2 hours 中保存准确时间

javascript - 将 ISO 时间转换为 H :MM am|pm in JavaScript