Python -- 如何加速导入?

3 投票
1 回答
4919 浏览
提问于 2025-04-16 17:46

我有成千上万的自定义模块(编译成了 '.so' 文件),我想在 python 中使用这些模块。这些模块的使用是有顺序的(一个接一个使用,而不是同时使用)。

通常,代码看起来会像这样:

# list with all the paths to all modules  
listPathsToModules = [.....]
# loop through the list of all modules 
for i in xrange(listPathsToModules):
    # get the path to the currently processed module 
    pathToModule = listPathsToModules[i]
    # import the module
    import pathToModule
    # run a function in 'pathToModule' and get the results
    pathToModule.MyFunction( arg1, arg2, arg3 )

运行这个代码后,我发现:

导入一个模块的平均时间是:0.0024625 [秒]

运行模块中的函数的平均时间是:1.63727e-05 [秒]

这意味着,导入模块的时间是运行其中一个函数时间的100倍!

有没有什么办法可以加快在 python 中加载模块的时间?考虑到需要加载和运行很多模块(假设有成千上万的模块),你会采取什么步骤来优化这个情况?

1 个回答

3

首先,我想问问你,使用 import 真的适合用来访问成千上万的代码片段吗?因为完整的导入过程是比较耗费资源的,而且加载(不共享的)动态模块也不便宜。

其次,你写的代码显然和你实际想做的事情不一样。导入语句在运行时并不接受字符串,你需要使用 importlib.import_module() 或者直接调用 __import__()

最后,优化的第一步是确保 sys.path 中的第一个目录是包含所有这些文件的目录。你可能还想用 -vv 参数运行 Python,这样可以让导入尝试的输出信息变得更详细。不过要注意,如果你要导入这么多东西,这样会产生非常多的输出信息。

撰写回答