Python - ускорить импорт?
У меня есть 10000-ые пользовательские (скомпилированные в '.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 [sec]
среднее время, необходимое для запуска функции модуля: 1.63727e-05 [sec]
имея в виду, it takes x100 more time to import the module than to run a function that is in it!
Есть ли что-нибудь, что можно сделать, чтобы ускорить время, необходимое для загрузки модуля в python
? Какие шаги вы бы предприняли, чтобы оптимизировать эту ситуацию, учитывая необходимость загрузки и запуска многих (предположительно, 10 000) модулей?
1 ответ
Я бы сначала вопрос, import
это действительно методика, которую вы хотите использовать для доступа к тысячам фрагментов кода - полный процесс импорта довольно дорог, и загрузка (не совместно используемых) динамических модулей вообще не особенно дешева.
Во-вторых, код, который вы написали, явно не тот, что вы на самом деле делаете. Оператор импорта не принимает строки во время выполнения, вам придется использовать importlib.import_module()
или звонит __import__()
непосредственно.
Наконец, первый шаг в оптимизации этого должен был бы гарантировать, что первый каталог на sys.path
это тот, который содержит все эти файлы. Вы также можете запустить Python с -vv
флаг для набора подробностей при попытках импорта. Имейте в виду, что это будет очень шумно, если вы делаете так много импорта.