Python / Cython / C и обратные вызовы, вызов функции Python из C с использованием Cython
У меня следующий вопрос. Мы должны передать функции обратного вызова в C-код. Если функция является функцией Cython в том же модуле, ситуация довольно проста
В Cython:
def callme(int x):
c_callme(x, <int (*)(int)>&callbackme)
cdef int callbackme(int x):
print <int> x
return <int>x
В С:
int c_callme(int x, int (*f)(int))
{
printf("---%d\n",x);
printf("--%d\n",f(x));
return x;
}
Вопрос заключается в следующем: мы хотим обобщить этот код наиболее Pythonic-способом, чтобы он мог также принимать функции Python в качестве аргументов обратного вызова (конечно, требуется дополнительный уровень), а также функции C / Cython из другого модуля. Я полагаю, что для функций C / Cython из отдельного модуля нужно получить адрес этих функций (преобразовать в long int?), А для функции Python необходима определенная оболочка