python: 重新导入模块的成本是多少?

python: What is the cost of re-importing modules?

我经常想在需要它们的狭窄上下文中导入模块。例如在使用模块的函数体中。在这种情况下,import 语句可能会被执行多次。

除了风格问题,这样做的性能成本是多少?

重复 import 语句的成本非常低,因为 Python 缓存模块并且只导入一次(在第一个 import 时),除非明确要求重新加载模块使用 reload 函数。重复 import 语句的效果(和粗略的性能影响)基本上只是在本地命名空间中绑定导入的名称。

然而,它并不是完全免费的; import 确实必须锁定和解锁导入 table 锁,并解析提供的名称。这意味着如果频繁调用它仍然会减慢您的程序。

看看本站的解释:

https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead

即使 Python 不会多次导入同一个模块,您的性能仍然可能受到影响,具体取决于代码的结构。您或许可以使用计时器来查看实际影响。

将此作为答案发布,因为它太大而无法发表评论:

我不清楚我最初的计时工作是否按预期工作,因为我收到警告说最慢的速度比最快的速度慢 20 倍 - 即:一些缓存正在发生以改变结果。

以下 运行 在装有 python 2.7.3 的 ipython 笔记本中,然而,似乎表明性能下降了大约 450 纳秒:

%%timeit import numpy
pass

100000000 次循环,3 次最佳:每次循环 11.3 ns

%%timeit import numpy
import numpy
pass

1000000 次循环,3 次最佳:每次循环 465 纳秒