Использование C-расширения для распараллеливания задач

Идея здесь состоит в том, чтобы переместить вычислительные задания на C (с помощью специальных макросов), независимо от Python, и заставить код C освобождать GIL во время его работы.

 #include "Python.h"
...
PyObject *pyfunc(PyObject *self, PyObject *args) {
    ...
    Py_BEGIN_ALLOW_THREADS
    // Threaded C code
    ...
    Py_END_ALLOW_THREADS
    ...
}