2011-09-24 3 views
5

나는 파이썬 임베딩의 새로운 것이다. 파이썬 + numpy 코드를 C++ 콜백 함수 (DLL 내부)에 임베드하려고합니다.파이썬 + numpy 코드를 C++ dll 콜백에 임베딩

내가 직면하는 문제는 다음과 같습니다. 내가 가지고있는 경우 :

모든 것이 잘 작동합니다.

하지만 경우 :

이 그것을 _import_array 도달 번째 시간에 충돌
Py_Initialize(); 
_import_array(); //to initialize numpy C-API 
// some python glue + numpy array object creation 
// python invocation via PyObject_CallObject() 
Py_Finalize(); 

(); (첫 번째 콜백에서 작동 함을 의미)

파이썬과 numpy 초기화를 한 번만 수행하고 소멸자에서 최종화 (따라서 초기화 할 때마다/완료하지 않음) 콜백을 떠날 때 모든 것이 충돌합니다.

제 생각 엔 여기

문제는 NumPy와,하지만 난 그것을

+0

, 나는 peronally의 distutils 및 한모금에 대한 세부 사항을 떠날 것이다 : 여기

는 "DLL에 C++ 싱글"에 대한 링크입니다. 다음은 예제 프로젝트입니다 (numpy와 인터페이스 함) : https://github.com/martinxyz/python/tree/master/realistic – maxy

답변

1

당신의 .DLL에 관계없이 코드가 실제로 호출되는 횟수의, 일단 초기화 만되어 있는지 확인 해보 해결하는 방법을 잘 모릅니다. 완전히 DLL이 구축되는 방법을 제어 할 수있는 경우

Singleton in a DLL?

+0

안녕하세요 Paul, 답변 해 주셔서 감사합니다! 그래서, 내 dll은 한 번만 초기화되고, 실제로는, 내 dll 초기화시 파이썬을 초기화하고 소멸자를 종료하면이 함수가 정상적으로 작동한다고 말하는 것을 생략했습니다. ' \ n "' '" "오늘은 ', ctime (시간)) \ n"'\t') 시간 가져 오기 시간에서 ctime \ n " ; 파이썬을 PyObject_CallObject()를 통해 호출하려고하면 콜백이 종료 될 때 더 이상 작동하지 않으며 콜백이 종료 될 때 충돌합니다. –

+1

안녕하세요 - 1) 프로그램 실행 중에 파이썬을 한 번만 초기화하십시오 (그리고 더 이상 초기화하지 마십시오. 한 번 이상, 그렇지 않으면 결코). 2) 위에 게시 된 martinxyz 샘플 코드를보십시오. 3)이 스레드를 봅니다 - 비슷한 문제가 참조 카운트 오류로 인해 발생했습니다. http://www.velocityreviews.com/forums/t566237-pyobject_callobject-code-dump-after -calling-4-times.html – paulsm4

+0

폴 감사합니다.이 링크는 많은 도움이되었습니다. 사실 문제는 PyTuple_SetItem()이 사용하는 객체의 DECREF였습니다. 이제는 작동하는 것처럼 보이지만 더 광범위한 테스트를해야합니다! 다시 한번 감사드립니다! –