Re: и ещё раз про буст-питон: межмодульная регистрация классов
От: Буравчик Россия  
Дата: 15.06.21 14:00
Оценка: 36 (1)
Здравствуйте, Кодт, Вы писали:

К>Модуль расширения (сошка) номер один, назовём её module_a: регистрирует класс A.

К>Сошка номер два, module_b: регистрирует класс B, унаследованный от A.
К>Для этого ей нужно, чтобы класс A уже был зарегистрирован в буст-питоне.
К>Если не выполнить импорт, то буст-питон кинет исключение SystemError.
К>Если выполнить, то при завершении произойдёт расстрел памяти из-за жидкой связи из-за модулями, которые выгружаются в каком-то не таком порядке.

Это не оно?

PyFinalize Safety

Currently Boost.Python has several global (or function-static) objects whose existence keeps reference counts from dropping to zero until the Boost.Python shared object is unloaded. This can cause a crash because when the reference counts do go to zero, there's no interpreter. In order to make it safe to call PyFinalize() we must register an atexit routine which destroys these objects and releases all Python reference counts so that Python can clean them up while there's still an interpreter. Dirk Gerrits has promised to do this job.


Проблема, как я понял, в неправильном порядке выгрузки so.
Может вручную выгрузить все — заргистрировшись в atexit? Или так нельзя?

https://stackoverflow.com/questions/31163520/sequence-of-object-cleanup-and-functions-called-by-atexit-in-python-module

P.S. Сразу скажу, что я про это ничего не знаю Просто пальцем в небо
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.