Python / Cython / C e callbacks, chamando uma função Python de C usando Cython

Eu tenho a seguinte pergunta. Temos que passar as funções de retorno de chamada para o código C. Se a função é uma função Cython no mesmo módulo, a situação é bastante simples

Em Cython:

def callme(int x):
    c_callme(x, <int (*)(int)>&callbackme) 

cdef int callbackme(int x):
    print <int> x
    return <int>x

Em C:

int c_callme(int x, int (*f)(int))
{
    printf("---%d\n",x);
    printf("--%d\n",f(x));
    return x;
}

A questão é a seguinte: queremos generalizar este código da maneira mais Pythonica para que ele possa aceitar também funções python como argumentos de callback (claro, é necessária alguma camada adicional), e também funções C / Cython de outro módulo. Eu suponho que, para funções C / Cython de um módulo separado, é necessário obter o endereço dessas funções (converter em long int?) E, para a função Python, um determinado wrapper é necessário

questionAnswers(2)

yourAnswerToTheQuestion