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 флаг для набора подробностей при попытках импорта. Имейте в виду, что это будет очень шумно, если вы делаете так много импорта.

Другие вопросы по тегам