sirve que programacion para lenguajes lenguaje caracteristicas c++ python cross-platform ipc

que - IPC simple entre C++ y Python(plataforma cruzada)



python lenguaje (7)

¿Qué tan complejo es tu información? Si es simple lo serializaría como una cadena. Si fuera moderadamente complejo, usaría JSON. TCP es un buen transporte de IPC multiplataforma. Como dice que este IPC es raro, el rendimiento no es muy importante, y TCP + JSON estará bien.

Tengo un proceso C ++ ejecutándose en segundo plano que generará ''eventos'' con poca frecuencia que un proceso de Python que se ejecute en el mismo recuadro tendrá que recuperarse.

  • El código en el lado C debe ser lo más ligero posible.
  • El lado de Python es de solo lectura.
  • La implementación debe ser multiplataforma.
  • Los datos que se envían son muy simples.

¿Cuáles son mis opciones?

Gracias


Diré que creas una DLL que administrará la comunicación entre los dos. El python cargará el DLL y el método de llamada como getData () y el DLL a su vez se comunicará con el proceso y obtendrá los datos. Eso no debería ser difícil. También puede usar el archivo XML o la base de datos SQLite o cualquier base de datos para consultar datos. El daemon actualizará DB y Python seguirá consultando. Puede haber un archivo para indicar si los datos en DB ya están actualizados por demonio y luego Python consultará. ¡Por supuesto depende de los factores de rendimiento y precisión!


El protobuf de Google es una gran biblioteca para RPC entre programas. Genera enlaces para Python y C++ .

Si necesita un sistema de mensajería distribuida, también puede usar algo como RabbitMQ , zeromq o ActiveMQ . Consulte esta pregunta para una discusión sobre las bibliotecas de cola de mensajes.


Otra opción es simplemente llamar a su código C desde su código Python utilizando el módulo ctypes lugar de ejecutar los dos programas por separado.


Puedes usar Google GRPC para esto


Use zeromq , es lo más simple que puede obtener.


zeromq - y nada más. codificar los mensajes como cadenas.

Sin embargo, si desea obtener serialiazation de una biblioteca, use protobuf y generará clases para Python y C ++. Utiliza las funciones SerializeToString () y ParseFromString () en cualquier extremo y luego canaliza las cadenas a través de ZeroMq.

Problema resuelto, ya que dudo que cualquier otra solución sea más rápida, y ninguna otra solución será tan sencilla de cablear y simple de entender.

Si desea utilizar primitivas de sistema específicas para rpc, como canalizaciones con nombre en Windows y Unix Domain Sockets en Unix, entonces debería mirar Boost::ASIO . Sin embargo, a menos que tenga (a) un fondo de red, y (b) una muy buena comprensión de C ++, esto llevará mucho tiempo.