Как повторно инициализировать встроенный интерпретатор Python?

Я работаю над внедрением Python в наше приложение из набора тестов. Цель состоит в том, чтобы использовать Python для запуска нескольких тестовых скриптов для сбора данных и составления отчета о тестах. Несколько тестовых сценариев для одного запуска теста могут создавать глобальные переменные и функции, которые можно использовать в следующем сценарии.

Приложение также предоставляет модули расширения, которые импортируются во встроенный интерпретатор и используются для обмена некоторыми данными с приложением.

Но пользователь также может выполнить несколько тестовых прогонов. Я не хочу делиться этими глобальными объектами, импортом и данными, которыми обмениваются между несколькими тестовыми запусками. Я должен быть уверен, что перезапускаюсь в подлинном состоянии, чтобы контролировать тестовую среду и получать те же результаты.

Как мне повторно инициализировать интерпретатор?

Я использовал Py_Initialize () и Py_Finalize (), но при второй инициализации модулей расширения, которые я предоставляю интерпретатору, возникла исключительная ситуация. И документация предостерегает от использования его более одного раза .

Использование субинтерпретаторов , похоже, имеет те же проблемы с инициализацией модулей расширения.

Я подозреваю, что что-то не так с инициализацией моих модулей расширения, но боюсь, что такая же проблема возникает со сторонними модулями расширения.

Возможно, удастся заставить его работать, запустив интерпретатор в его собственном процессе, чтобы быть уверенным, что вся память освобождена.

Между прочим, я использую для этого boost-python, который также предупреждает ПРОТИВ, используя Py_Finalize!

Есть предложения?

Спасибо

9
задан nab 13 October 2011 в 02:04
поделиться