J'ai un processus C++ qui s'exécute en arrière-plan et qui génère rarement des «événements» qu'un processus Python s'exécutant sur la même boîte doit être détecté.
Quelles sont mes options?
Merci
zeromq - et rien d'autre. encoder les messages sous forme de chaînes.
Cependant, si vous voulez obtenir une sérialisation à partir d'une bibliothèque, utilisez protobuf , il générera des classes pour Python et C++. Vous utilisez les fonctions SerializeToString () et ParseFromString () à chaque extrémité, puis dirigez les chaînes via ZeroMq.
Le problème est résolu, car je doute qu'une autre solution soit plus rapide et aucune autre solution ne soit aussi facile à câbler et à comprendre.
Si vous voulez utiliser des primitives système spécifiques pour rpc, telles que les canaux nommés sous Windows et les sockets de domaine Unix sous unix, consultez le fichier Boost :: ASIO . Cependant, à moins que vous n’ayez (a) une expérience en réseau, et (b) une très bonne compréhension de C++, cela prendra beaucoup de temps.
Le protobuf de Google est une excellente bibliothèque pour le RPC entre les programmes. Il génère des liaisons pour Python et C++ .
Si vous avez besoin d’un système de messagerie distribué, vous pouvez également utiliser quelque chose comme RabbitMQ , zeromq ou ActiveMQ . Voir this question pour une discussion sur les bibliothèques de files de messages.
Utilisez zeromq , c’est aussi simple que vous pouvez l’obtenir.
Une autre option consiste simplement à appeler votre code C à partir de votre code Python à l'aide du module ctypes
plutôt que d'exécuter les deux programmes séparément.
Quelle est la complexité de vos données? Si c'est simple, je le sérialiserais comme une chaîne. Si c'était moyennement complexe, j'utiliserais JSON. TCP est un bon transport IPC multiplate-forme. Puisque vous dites que ce IPC est rare, les performances ne sont pas très importantes et TCP + JSON ira bien.
Vous pouvez utiliser Google _ GRPC pour cela