Cómo llamar a una función de Python desde un hilo de idioma extranjero (C ++)

Estoy desarrollando un programa que usa DirectShow para capturar datos de audio de archivos multimedia. DirectShow usa hilo para pasar datos de audio a la función de devolución de llamada en mi programa, y dejo que esa función de devolución de llamada llame a otra función en Python.

Uso Boost.Python para envolver mi biblioteca, la función de devolución de llamada:

class PythonCallback {
private:
    object m_Function;
public:
    PythonCallback(object obj)
        : m_Function(obj)
    {}

    void operator() (double time, const AudioData &data) {
        // Call the callback function in python
        m_Function(time, data);
    }

};

Aquí viene el problema, un hilo de DirectShow llama a mi PythonCallback, es decir, llama a la función en Python. Una vez que llama, mi programa simplemente se bloquea. Encontré que esto debería ser un problema de subprocesos. Entonces encontré este documento:

http: //docs.python.org/c-api/init.htm

Parece que mi programa no puede llamar directamente a la función de Python desde el hilo, porque hay un bloqueo global de intérprete. El GIL del pitón es tan complejo que no tengo idea de cómo funciona. Lo siento, lo que puedo hacer es preguntar. Mi pregunta es. ¿Qué debo hacer antes y después de llamar a una función de Python desde subprocesos?

Puede verse así.

void operator() (double time, const AudioData &data) {
    // acquire lock
    m_Function(time, data);
    // release lock
}

Gracias. Victor Lin.

Respuestas a la pregunta(2)

Su respuesta a la pregunta