2011-10-06 53 views
10

在下面的代碼的第二個電話,我的應用程序段錯誤的工作了兩次,所以我想我失去了一些東西:Py_initialize/Py_Finalize不是numpy的

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的。如果我刪除numpy導入,一切都很好。這是一個不穩定的錯誤,還是我錯過了關於進口的東西?

回答

11

Py_Finalize docs

有些分機可能無法正常工作,如果他們的初始化程序被調用一次以上;如果應用程序多次調用Py_Initialize()和Py_Finalize(),就會發生這種情況。

顯然Numpy就是其中之一。參見Numpy討論的this message

只撥打Py_Initialize()一次,並清理at exit,是要走的路。 (它也應該更快!)

+0

我不需要多次初始化/結束,但我想檢查我的理解是否正確 – shodanex

0

我在我的模塊初始化部分有這個,但URL不再存在。如果有幫助:

// http://numpy.scipy.org/numpydoc/numpy-13.html mentions this must be done in module init, otherwise we will crash 
import_array();