파이썬3 에서 C 모듈 만들고 사용하기

인터프리터 언어인 파이썬으로는 많은 양의 계산을 하기에는 속도가 느립니다. 이럴 때마다 계산을 많이 해야하는 핵심이 되는 부분만 C 언어로 작성하여 모듈로 사용하면 효율적입니다. Python 2 에서 C 언어로 작성한 모듈을 사용하는 예제들은 쉽게 찾을 수 있었지만, Python 3 로 넘어오면서 몇 가지 바뀐 것들로 인해 Python 2 를 기준으로 설명된 예제들을 따라했더니 되지 않는 경우가 많았습니다. 이 포스팅은 Python 3 를 사용하는 사람들을 대상으로 작성하였습니다.

먼저, C 모듈을 만들어 볼 겁니다. 다음과 같이 mylib.c 라는 파일명으로 다음과 같은 내용으로 입력해주면 됩니다.

#include "Python.h"

static PyObject*
mylib_add(PyObject *self, PyObject *args)
{
    char* str;
    int len;

    if (!PyArg_ParseTuple(args, "s", &str))
        return NULL;

    len = strlen(str);

    return Py_BuildValue("i", len);
}

static PyMethodDef
spam_methods[] = {
    {"add", spam_strlen, METH_VARARGS, "count a string length"},
    {NULL, NULL, 0, NULL}
};

static struct PyModuleDef
spam_module = {
    PyModuleDef_HEAD_INIT,
    "spam",
    "It is test module",
    -1, spam_methods
};

PyMODINIT_FUNC
PyInit_spam(void)
{
    return PyModule_Create(&spam_module);
}