Como chamar uma função python de um segmento de idioma estrangeiro (C ++)

Estou desenvolvendo um programa que usa o DirectShow para capturar dados de áudio de arquivos de mídia. O DirectShow usa thread para passar dados de áudio para a função de retorno de chamada no meu programa, e eu deixei essa função de retorno de chamada chamar outra função no Python.

Eu uso o Boost.Python para envolver minha biblioteca, a função de retorno de chamada:

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);
    }

};

Aí vem o problema, um thread do DirectShow chama meu PythonCallback, ou seja, chama a função no Python. Uma vez chamado, meu programa simplesmente falha. Achei que isso deveria ser um problema de segmentação. Então eu encontrei este documento:

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

Parece que meu programa não pode chamar a função do Python diretamente do thread, porque existe o Global Interpreter Lock. O GIL do python é tão complexo que não faço ideia de como ele funciona. Sinto muito, o que posso fazer é perguntar. Minha pergunta é. O que devo fazer antes e depois de chamar uma função Python a partir de threads?

Pode parecer com isso.

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

Obrigado. Victor Lin.

questionAnswers(2)

yourAnswerToTheQuestion