我有一个在后台运行的C ++进程,它将生成'事件'很少需要在同一个盒子上运行的Python进程。
我有什么选择?
由于
答案 0 :(得分:43)
zeromq - 没有别的。将消息编码为字符串。
但是,如果要从库中获取序列化,请使用protobuf,它将为Python和C ++生成类。您在任一端使用SerializeToString()和ParseFromString()函数,然后通过ZeroMq管道字符串。
问题解决了,因为我怀疑任何其他解决方案都更快,任何其他解决方案都不会像接线那样容易理解。
如果想为rpc使用特定的系统原语,例如Windows上的命名管道和unix上的Unix域套接字,那么你应该查看Boost::ASIO。但是,除非你有(a)网络背景,并且(b)非常了解C ++,否则这将是非常耗时的
答案 1 :(得分:5)
Google的protobuf是程序之间RPC的绝佳库。它会为Python和C++生成绑定。
如果您需要分布式邮件系统,还可以使用RabbitMQ,zeromq或ActiveMQ之类的内容。有关消息队列库的讨论,请参阅this question。
答案 2 :(得分:4)
使用zeromq,就像你能得到的一样简单。
答案 3 :(得分:2)
另一种选择是使用ctypes
模块从Python代码调用C代码,而不是分别运行这两个程序。
答案 4 :(得分:1)
您的数据有多复杂?如果它很简单,我会将其序列化为字符串。如果它是中等复杂的我会使用JSON。 TCP是一种很好的跨平台IPC传输方式。既然你说这个IPC很少见,那么性能不是很重要,TCP + JSON也没问题。
答案 5 :(得分:0)
您可以将Google http://api.jquery.com/jquery.ajax/用于此
答案 6 :(得分:-4)
我会说你创建了一个DLL来管理两者之间的通信。 python将加载DLL并调用getData()方法,DLL将依次与进程通信并获取数据。 这应该不难。 您还可以使用XML文件或SQLite数据库或任何数据库来查询数据。守护进程将更新数据库,Python将继续查询。可能存在用于指示数据库中的数据是否已由守护程序更新然后Python将查询的字段。 当然,这取决于性能和准确度因素!