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

时间:2015-04-08 01:26:19

标签: python import

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

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

3 个答案:

答案 0 :(得分:4)

请看一下本网站的解释:

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

尽管Python不会多次导入同一个模块,但根据代码的结构,您仍可能会遇到性能损失。您可以使用计时器查看实际影响。

答案 1 :(得分:3)

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

然而,它并非完全免费; import必须锁定和解锁导入表锁,并解析提供的名称。这意味着如果频繁调用,仍然可以减慢你的程序。

答案 2 :(得分:1)

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

我不清楚我的原始计时工作是否按预期工作,因为我得到警告说最慢的速度比最快的慢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 ns /循环