Общие модули Python SwigPython

Программы на Python
Anonymous
Общие модули Python Swig

Сообщение Anonymous »

У меня есть сложное приложение C++ (назовем его foo), которое предоставляет API, завернутый для Python через Swig.
Это обеспечивает библиотеку с состоянием, т. е. большие объемы сложных данных хранятся на стороне C++, API в основном состоит из относительно простых вызовов функций, которые манипулируют/опрашивают состояние модели.
Недавно я разработал еще одно приложение C++ (), который использует первый () как библиотеку (непосредственно через C++ #include и статическое связывание).
Теперь я также обернул bar с помощью Swig. У него есть собственный файл *.i.
Это приводит к следующему:

Код: Выделить всё

foo.py
_foo.so
bar.py
_bar.so
Использование foo или bar из Python, кажется, работает должным образом.
Однако, если я одновременно загружаю foo и bar в Python, они, похоже, взаимодействуют и ведут себя странным образом. Похоже, что на стороне C++ они используют одно и то же состояние. Это неожиданно (для меня). Я бы ожидал, что у них будут полностью независимые области памяти, копии кода и т. д.
Мои ожидания ошибочны? Если да, есть ли опция Swig или Python, позволяющая изменить это поведение? Можно ли обернуть часть C++ в дополнительное пространство имен из файла *.i?

Вернуться в «Python»