Py_initialize / Py_Finalize не работает дважды с NumPy - PullRequest
11 голосов
/ 06 октября 2011

При втором вызове следующего кода мое приложение перестало работать, так что, я думаю, что-то упустил:

Py_Initialize();
pName = PyString_FromString("comp_macbeth");
pModule = PyImport_Import(pName);
Py_DECREF(pName);

if(pModule == NULL) {
    PyErr_Print();
    Py_Finalize();
    return;
}

pFunc = PyObject_GetAttrString(pModule, "compute");
/* pFunc is a new reference */

if (!pFunc || !PyCallable_Check(pFunc) ) {
    PyErr_Print();
    Py_Finalize();
    return;
}

Py_Finalize();

comp_macbeth.py импортирует numpy. Если я уберу импровизированный импорт, все будет хорошо. Это просто ошибка или я что-то упускаю из-за импорта?

Ответы [ 2 ]

11 голосов
/ 06 октября 2011

Из документов Py_Finalize :

Некоторые расширения могут работать некорректно, если их процедура инициализации вызывается более одного раза;это может произойти, если приложение вызывает Py_Initialize () и Py_Finalize () более одного раза.

Очевидно, Numpy является одним из них.См. Также это сообщение от Numpy-Discussion.

Вызов Py_Initialize() только один раз и очистка на выходе - это путь.(И это тоже должно быть быстрее!)

0 голосов
/ 06 октября 2011

У меня есть это в моей части инициализации модуля, но URL больше не существует. Если это поможет:

// http://numpy.scipy.org/numpydoc/numpy-13.html mentions this must be done in module init, otherwise we will crash
import_array();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...