2011-09-24 9 views
5

Python yerleştirme işleminin yeni bölümüyim. Python + numpy kodunun bir C++ geri çağırma işlevinin içine gömülmeye çalışıyorum (dll içinde)Python + numpy kodunu gömme C++ dll geri arama

Karşılaştığım sorun aşağıdadır. Eğer her şey iyi çalışıyorsa:

.

ama varsa:

bu da _import_array ulaştığı ikinci zamanda çöker
Py_Initialize(); 
_import_array(); //to initialize numpy C-API 
// some python glue + numpy array object creation 
// python invocation via PyObject_CallObject() 
Py_Finalize(); 

(); (ilk geri bildirimde işe yaradığı anlamına gelir)

Bunun yerine sadece bir kez python ve numpy başlatmayı ve yok edicideki sonlandırmayı (böylece her başlatırken/sonlandırırken) yapmazsanız, her şey geri aramadan ayrılırken çöker ..

sanırım burada

sorun numpy olmakla ben

+0

, ben peronally distutils ve swig ayrıntıları bırakacaktı: Burada

bir "DLL C++ Singleton" konulu bağlantıdır. İşte örnek bir proje (numpy ile arayüz): https://github.com/martinxyz/python/tree/master/realistic – maxy

cevap

1

sizin .dll bakılmaksızın kod aslında çağrılır kaç kez, kez başlatıldı sadece emin olun deneyin çözmek için nasıl bilmiyorum. tam DLL nasıl inşa edildiğini kontrol edebilirsen

Singleton in a DLL?

+0

Merhaba Paul, cevabınız için teşekkürler! Yani, eminim ki benim dll bir kez başlatılmış ve aslında, ben de benim dll başlatılması python başlatır ve yıkıcı içinde sonlandırmak eğer, bu gibi bir şey iyi çalışır: 01. PyRun_SimpleString (' ' "zaman ithalat zaman, ctime \ n" ' ' "numpy ithalat * \ n" ' ' "baskı, ctime 'Bugün' (time()) \ n" '\t ') ; python'u PyObject_CallObject() ile çağırmaya çalışırsanız, artık çalışmıyor ve geri arama sona erdiğinde geri dönüyor –

+1

Merhaba - 1 Program yürütme sırasında Python'u yalnızca ONCE başlattığınızdan emin olun (ve henüz başlatılmamışsa) Bir kereden fazla, aksi halde asla). 2) Yukarıda belirtilen martinxyz örnek koduna bakın, 3) Bu iş parçacığına bakın - referans sayısının neden olduğu benzer bir sorun: http://www.velocityreviews.com/forums/t566237-pyobject_callobject-code-dump-after -calling-4-times.html – paulsm4

+0

Çok teşekkürler Paul, bu bağlantı çok yardımcı oldu! Aslında sorun, PyTuple_SetItem() tarafından kullanılan bir nesnenin DECREF'uydu. Şimdi işe yarıyor gibi görünüyor, ama tabii ki daha kapsamlı testler yapmak zorundayım! Tekrar teşekkürler! –