Python 在函数中导入模块的开销有多大?

Python 在函数中导入模块的开销有多大?,python,flask,python-import,Python,Flask,Python Import,我有一个Flask后端,在其中我在模块级别导入模块,但我只在一个函数中使用它: 导入魔法 def向导(文件名): 从_文件(文件名)返回magic.from 由于magic依赖于C库,我无法在windows上安装该库,而且该函数是唯一使用magic的地方,我想知道将导入移动到该函数是否有缺点(甚至优点): def向导(文件名): 进口魔术 从_文件(文件名)返回magic.from 导入magic的开销是否只对第一个使用该函数的用户重要,然后每个人都会用到它?还是Flask/Python会一

我有一个Flask后端,在其中我在模块级别导入模块,但我只在一个函数中使用它:

导入魔法
def向导(文件名):
从_文件(文件名)返回magic.from
由于magic依赖于C库,我无法在windows上安装该库,而且该函数是唯一使用
magic
的地方,我想知道将导入移动到该函数是否有缺点(甚至优点):

def向导(文件名):
进口魔术
从_文件(文件名)返回magic.from

导入
magic
的开销是否只对第一个使用该函数的用户重要,然后每个人都会用到它?还是Flask/Python会一次又一次地加载它?

这样的模块导入只会发生一次,下次调用函数时,Python只会检查模块是否已经在导入模块的集合()中,并从中获取它;要实际重新加载一个模块,您可以使用以下命令。因此,可能会有一个非常轻微的开销,但肯定可以忽略不计。在函数中加载有助于减少启动时间,仅“根据需要”(延迟)加载其他模块。在任何情况下,基准测试都应该确认,@jdehesa“这样的模块导入只发生一次”-在web服务器的线程上下文中也是这样吗?@jdehesa“在任何情况下,基准测试都应该确认”-您如何对web服务器进行基准测试?我想知道是每个用户都支付了性能费,还是只有第一个用户支付了性能费。我不认为线程在这里有什么区别,只要所有的东西都在同一个过程中。通过基准测试,我的意思是只对有导入和无导入的函数的运行时间进行计时(例如,使用IPython的
%timeit
)——尽管差异可能太小,无法可靠测量。一些相关问题:,和。