2015-06-06 3 views
0

Я хочу знать, есть ли PyMOD(DEINIT)_FUNC ?, Я знаю, что ресурсы освобождаются при выходе из сценария python, но я хотел бы сделать свой код ответственным за используемую им память.Есть ли PyMOD (DEINIT) _FUNC?

Я, конечно, искал документацию, и до сих пор я думаю, что нет функции, вызванной из ядра python, в модуль c, когда модуль выгружается, но я надеюсь, что есть, и я просто не знаю, как искать ,

+0

Пожалуйста, отметьте вашу версию python. Также обратите внимание на https://bugs.python.org/issue9072, особенно «* Примите, что Python действительно не поддерживает выгрузку модулей для серьезных, фундаментальных, непреодолимых технических проблем, в 2.x. *» – dhke

+2

Также релевантно [PEP 3121] (https://www.python.org/dev/peps/pep-3121/): * В дополнение к функции инициализации модуль может реализовать ряд дополнительных функций обратного вызова, которые вызываются, когда вызывается функция tp_traverse модуля, tp_clear и tp_free, и когда модуль перезагружается. * Это реализовано для Python 3, а не Python 2, поэтому ваша точная версия важна. –

+0

@dhke Я часто забываю, как раздражает то, что существует очень большая разница между версиями, и сколько много проектов придерживаются python2, однако я верю, что когда-нибудь все перейдут на python3, и я сделаю все с помощью python3, особенно c-модулей. –

ответ

2

Python 2 не поддерживает завершение модуля, нет. См bug 9072:

Пожалуйста, примите, что Python действительно не поддерживает разгрузку модулей для тяжелых, фундаментальных, непреодолимыми, технических проблем, в 2.x.

Для Python 3, C API для инициализации модуля был пересмотрен (см PEP 3121) и новый PyModuleDef struct имеет m_free slot, которая принимает функцию обратного вызова; используйте это, чтобы очистить память модуля.

+0

Отличный ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^