Python -- 如何加速导入?
我有成千上万的自定义模块(编译成了 '.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,这样可以让导入尝试的输出信息变得更详细。不过要注意,如果你要导入这么多东西,这样会产生非常多的输出信息。