#python #setuptools #pybind11 #python-importlib
#python #setuptools #pybind11 #python-importlib
Вопрос:
У меня возникли некоторые проблемы с пониманием того, что здесь происходит. (Случай 1) Первоначально я установил свой сгенерированный pybind11 файл .so с помощью setuptools, а затем выполнил обычный импорт в python. (Случай 2) Теперь я напрямую указываю importlib на расположение файла .so и создаю модуль «на лету». Однако при использовании модуля после выполнения всех настроек случай 1 выполняется намного быстрее, чем случай 2. То, что я сделал в случае 2,:
import importlib
modname, filename = 'pacakge',"path/to/package.so"
loader = importlib.machinery.ExtensionFileLoader(modname, filename)
spec = importlib.machinery.ModuleSpec(
name = modname,
loader = loader,
origin = filename,
)
module_going_to_use = loader.create_module(spec)
# do something with module_going_to_use
# (and this part is much slower than Case 1).
Любые предложения о том, что может вызвать это?
Заранее спасибо!
Комментарии:
1. Я предполагаю, что есть шаг настройки, который во втором случае откладывается до фактического использования модуля. Ключевым тестом этого является попытка использовать
module_going_to_use
дважды в одной и той же области. Если вы делаете то же самое, чтоmodule_going_to_use
и во второй раз, выполняется ли этот второй раз быстрее? Если это произойдет, то у вас есть свой ответ. Если это так, то у вас есть веская причина делать что-то по-другому, чтобы не нести затраты на настройку при каждом запуске вашего кода.2. Я предполагаю, что в случае 1 во время установки выполняется некоторая работа, чтобы ускорить импорт модуля во время выполнения. В случае 2 ваш код вынужден считывать и обрабатывать
.so
с нуля во время выполнения. Я уверен, что лучший выбор для вас — использовать вариант 1.3. Спасибо за предложение! Но я просто рассчитал время эксперимента, о котором вы сказали, запуск два раза, похоже, не имеет эффекта. 🙁