python:重新导入模块的成本是多少?
我经常试图在狭窄的上下文中导入需要的模块。例如,在使用模块的功能主体中。在这种情况下,可以多次执行import语句python:重新导入模块的成本是多少?,python,import,Python,Import,我经常试图在狭窄的上下文中导入需要的模块。例如,在使用模块的功能主体中。在这种情况下,可以多次执行import语句 除了风格问题外,这样做的性能代价是什么?重复的导入语句几乎没有代价,因为Python缓存模块并只导入一次(第一次导入),除非明确要求使用重载函数重新加载模块。重复的import语句的效果(以及粗略的性能影响)本质上只是将导入的名称绑定到本地名称空间中 然而,它并不是完全免费的导入必须锁定和解锁导入表锁,并解析提供的名称。这意味着,如果频繁调用,仍然会降低程序的速度。请查看此网站上的
除了风格问题外,这样做的性能代价是什么?重复的
导入
语句几乎没有代价,因为Python缓存模块并只导入一次(第一次导入
),除非明确要求使用重载
函数重新加载模块。重复的import
语句的效果(以及粗略的性能影响)本质上只是将导入的名称绑定到本地名称空间中
然而,它并不是完全免费的<代码>导入必须锁定和解锁导入表锁,并解析提供的名称。这意味着,如果频繁调用,仍然会降低程序的速度。请查看此网站上的说明:
尽管Python不会多次导入同一个模块,但根据代码的结构,您可能仍然会受到性能的影响。您可以使用计时器查看实际影响。将此作为答案发布,因为它太大,无法发表评论: 我不清楚我最初的计时工作是否如预期的那样工作,因为我收到警告说最慢的计时比最快的计时慢20倍——即:一些缓存正在发生以更改结果 但是,在使用python 2.7.3的ipython笔记本中运行的以下内容似乎表明了大约450纳秒的性能损失:
%%timeit import numpy
pass
100000000个循环,最佳3个:每个循环11.3纳秒
%%timeit import numpy
import numpy
pass
1000000个循环,最佳3个:每个循环465纳秒
%%timeit import numpy
import numpy
pass