어제 문제가 됐던 memory leak 잡았다.

오늘 진짜 Cpp 컴파일을 한 백번은 한거 같다.. ㅡㅡ;

C 함수를 Wrapping 해서 불러와서 실행은 정말 잘되고 그런데..
앞으로 프로그램에 탑제되서 길게는 몇달을 돌을텐데…

문서 필터링할때마다 메모리가 쌓이면 안되지..

인터렉트브 쉘로 만번 천번씩 돌려보며 메모리 세는거 보고 수정하고 보고….

100번은 했나보다.. 하루 종일…

근데.. 솔직히 C코드나 Python 코드나 이상은 없는데..
문제는 인터페이스 파일이 문제 였다..

인터페이스 파일 정하는것도 책이 한권이여서… 필요한 부분만 보면서 하고 있는데..
Python – C 확장 모듈에 문외한인지라. 단서를 잡았긴 했다…

Free 하는법…이 코드를 어디에다 써야 반환되는 반환 즉시 C에서 memset으로 정한 char* 를메모리 반환을 하는지..
그리고 반환하기 전에 뭘 해야하는지에 대해서 어느정도 이제 감을 잡았다..

Python 고수의 경지라는 C 확장 모듈 부분,… 이제 막 감을 잡은 상태다..
좀더 공부해야겠다…

그나저나 이제 한숨 놓인다… C 하고 붙는건 이제 어느정도 자신 있으니..

그리고 자신있게 Python을 우리 프로젝트에 적용할수 있는 명분과 자신감이 생겼다.

그나저나 Python을 우리 검색엔진에 프로젝트에 도입하는데 팀장님이 동의하신 날이다.
기쁘다… 그래도 우리 팀 분들은 열린 생각을 가지고 있어서..

Python 과 C 결합

오늘 참 오랜만에 포인터 놀이를 했다.

오랜만에 해서 그런지 예전의 C언어의 느낌과는 사뭇 다르다는 생각을 했다.

전에 Python을 맥가이버 칼로 비유 했는데 C는 Hammer 정도라고나 할까?
암튼 강력한 언어인거 같다.

오늘 참 많은걸 했다. dll로 되어 있는 문서 filter 모듈내의 함수를 좀 써볼라고 처음에 고생고생하다가 cpp로 filter factory 함수를 만들어 결국 python 랩핑(Wrapping)하는데 성공했다..^^;
퇴근할라고 하니 저녁 11시 (ㅜㅜ) 그래도 가벼운 발걸음으로 돌아올수 있었다.
내일이 기대된다. cpp에서 리턴한 memset 으로 할달한 변수를 어떻게 Python에서 메모리 Free를 시킬까…ㅋㅋ 암튼 기대기대

처음에 ctypes으로 오전 내내 dll 가지고 놀라고 삽질만하다가… 결국포기
(이건 좀더 연구가 필요하다… Python 인터프리터 셀 에서 C포인터 및 자료형을 가지고 놀수 있는 모듈이라 보면 정확하다.)

다음에 Pyrex로 C모듈좀 다루어 볼라다가 Pyrex라는게 하나의 언어라 성질급한 나로서는 안됨 무엇보다 cpp 모듈로 작성되어진걸 Pyrex 언어(?)로 컨버젼해야한다는게 귀찮음

저녁 먹고 새로 잡은게 SWIG라는 툴이다… 이건 파이썬에서 C 함수에 접근할수 있게 인터페이스 cpp 모듈을 만들어 주는 툴이다.. 이걸로 인터페이스 모듈 만들후에 Visual C++ 7.1로 컴파일 과정을 거쳐 최종적으로 Python 인터페이스 모듈과 pyd 파일이 만들어진다.

결국 모듈 만들기에 성공했다. 물론 플랫폼 독립적으로 만들려고 했기때문에 dll은 안쓸라고 했지만 어쩔수 없이 썼다. 하지만 리눅스나 쏠라리스플랫폼으로 간다면 살짝 이 인터페이스 부분하고 라이브러리 컴파일 다시 해주면 되니까…

언어 운운하니 아직은 초보인가 보다…허극…