2011-10-06 13 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のインポートを削除しても、すべて問題ありません。それはナンキンなバグか、輸入品について何か不足していますか? Py_Finalize docsから

答えて

11

、初期化ルーチンを2度以上呼び出された場合、一部の拡張機能が正しく動作しない場合があります。これは、アプリケーションがPy_Initialize()とPy_Finalize()を複数回呼び出す場合に発生します。

明らかに、ナンシーはそれらの1つです。 Numpy-discussionのthis messageも参照してください。

Py_Initialize()を一度だけ呼び出すと、at exitをクリーンアップする方法があります。

+0

私はinitialize/finalizeを2回以上行う必要はありませんが、私の理解が正しいかどうかを確認したいと思いました – 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(); 
関連する問題