c++ python callback boost-python

pase la devolución de llamada de python a c++ usando boost:: python



callback boost-python (1)

Quiero pasar la devolución de llamada de mi código de python a c ++

Quiero que mi código se vea algo como esto: En C ++:

typedef void (*MyCallback_t) (CallbackInfo); class MyClass {... void setcallback(MyCallback_t cb); ... }

Y para usarlo en python:

import mylib def myCallback(mylib_CallbackInfo): ... t = mylib.MyClass() t.setcallback(myCallback)

Vi algunos temas cerca de mi problema pero no pude resolverlo

Por ejemplo, aquí: procesamiento en tiempo real y devoluciones de llamadas con Python y C ++, hay consejos para usar boost :: python y advertencias sobre GLI, pero no hay ejemplos. Y aquí

Cómo llamar a una función de python desde un hilo de idioma extranjero (C ++) no hay una descripción completa con la parte del código de python y con la parte "BOOST_PYTHON_MODULE"

También encontré el enlace para usar py_boost_function.hpp, por ejemplo, en Boost python howto, pero no se compiló y, de hecho, no pude entender cómo usarlo.


Ok, todavía estoy tratando de resolver esto también, pero esto es lo que me está funcionando hasta ahora:

#this is the variable that will hold a reference to the python function PyObject *py_callback; #the following function will invoked from python to populate the call back reference PyObject *set_py_callback(PyObject *callable) { py_callback = callable; /* Remember new callback */ return Py_None; } ... #Initialize and acquire the global interpreter lock PyEval_InitThreads(); #Ensure that the current thread is ready to call the Python C API PyGILState_STATE state = PyGILState_Ensure(); #invoke the python function boost::python::call<void>(py_callback); #release the global interpreter lock so other threads can resume execution PyGILState_Release(state);

La función python se invoca desde C ++ y se ejecuta como se espera.