파이썬으로 C로 짠 프로그램에 정보 넘겨주는 방법

조회수 2614회

C언어로 멀티쓰레딩 프로그램을 만들고 있습니다. 연산량이 제법 많기 때문에 파이썬으로는 무립니다. 무엇보다 핵심 함수들을 다 구현했습니다.

이 C언어 프로그램이 처음에 한 번 데이터를 넣어 주어야 합니다. 인티져 10여개에 더블 변수 한 100여개 입니다. 지금은 이걸 내 컴퓨터 안의 csv 파일에서 읽어 옵니다.

이 csv파일은 파이썬으로 DB를 읽어서 떨궈줍니다. 예..... ODBC니 뭐니 하는거 할 줄 모르고 귀찮아서 파이썬으로 했습니다 -_-;;;;

DB ->파이썬->C 순으로 작동합니다.

파이썬 프로그램은 OS 모듈을 이용해서 C프로그램을 호출하니까, 저 과정은 자동으로 되긴 합니다.

아, 그리고 파이썬 프로그램은 그냥 DB만 떨굴 뿐만 아니라 서버 역할을 해서 항상 네트워크 응답에 대응하는 역할도 하고 있습니다.

C 프로그램은 연산한 결과값-더블 배열 5개를 csv파일로 떨굽니다. 이걸 파이썬 프로그램이 읽어다 DB에 씁니다. 결국 DB->파이썬->파일->C->파일->파이썬->DB 라는 굉장히 불합리한 구조가 되었습니다;;;;;

할 줄 아는게 이거라서 괜히 파일에 불필요하게 썼다가 읽어오고 다시쓰고 다시 읽는 과정이 들어 있는데, 어떻게 하면 될까요?

어떻게 파이썬으로 C 프로그램에 100여개 쯤 되는 인자를 전달할 수 있을까요? 어떻ㅎ게 C프로그램의 결과값을 받아올 까요?

결과값 받아오는 것이야 몇 개 안되니까 그냥 stdout을 받는다 쳐도, 인자 전달은 어떻게 해야 할 지 모르겠습니다.

어떻게들 하시나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    독립적인 프로세스사이에 통신이라면 전통적인 IPC 방법들을 사용하면 됩니다.

    메세지, 파이프, 공유메모리, 소켓등을 이용해서 처리할 수 있습니다.

    그러나 파이썬과 c사이라면 확장모듈을 만들거나 ffi(파이썬은 ctypes이 제공됨)을 이용해서 처리하는 편이 가장 낫습니다.

    질문을 보니 c로 작성된 라이브러리를 파이썬에서 호출만 하면 되는 형태로 보이는데요....

    cython 으로 해당 라이브러리를 감싸는 확장모듈을 만드는 형태가 어떨까 싶습니다.

    • 이거 저거 많이 알려 주시고, 뭔가 될 거 같기도 한데 막상 하려고 하니까 손이 잘 안 나가네요;;;; 마냥 회피할 수 있는 문제는 아니니 나중에 말씀해주신 것으로 한번 해 보고 결과 알려드릴게요 광자 2017.9.29 13:57

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)