Ich habe einen C++ - Prozess, der im Hintergrund ausgeführt wird und selten 'Ereignisse' generiert, die ein Python-Prozess, der auf derselben Box ausgeführt wird, benötigt.
Welche Möglichkeiten habe ich?
Vielen Dank
zeromq - und sonst nichts. codieren Sie die Nachrichten als Zeichenfolgen.
Wenn Sie die Serialisierung von Bibliotheken erhalten möchten, verwenden Sie protobuf , um Klassen für Python und C++ zu generieren. Sie verwenden die Funktionen SerializeToString () und ParseFromString () an beiden Enden und leiten dann die Zeichenfolgen über ZeroMq.
Problem gelöst, da ich bezweifle, dass jede andere Lösung schneller ist, und auch keine andere Lösung ist so einfach zu verkabeln und zu verstehen.
Wenn Sie bestimmte Systemprimitive für rpc verwenden möchten, z. B. Named Pipes unter Windows und Unix Domain Sockets unter Unix, sollten Sie unter Boost :: ASIO nachsehen. Wenn Sie jedoch (a) keinen Netzwerkhintergrund haben und (b) ein sehr gutes Verständnis von C++ haben, ist dies sehr zeitaufwändig
Googles protobuf ist eine großartige Bibliothek für RPC zwischen Programmen. Es erzeugt Bindungen für Python und C++ .
Wenn Sie ein verteiltes Messagingsystem benötigen, können Sie auch etwas wie RabbitMQ , zeromq oder ActiveMQ verwenden. Siehe diese Frage für eine Diskussion über die Nachrichtenwarteschlangenbibliotheken.
Verwenden Sie zeromq , es ist so einfach wie Sie nur können.
Eine andere Möglichkeit ist, den C-Code einfach aus dem Python-Code heraus mit dem Modul ctypes
aufzurufen, anstatt die beiden Programme getrennt auszuführen.
Wie komplex sind Ihre Daten? Wenn es einfach ist, würde ich es als String serialisieren. Wenn es mäßig komplex wäre, würde ich JSON verwenden. TCP ist ein guter plattformübergreifender IPC -Transport. Da Sie sagen, dass dieses IPC selten ist, ist die Leistung nicht sehr wichtig und TCP + JSON ist in Ordnung.
Sie können dazu Google GRPC verwenden