我想在C ++中编写一个守护进程,它将保存图形数据结构并计算一些依赖项。我还希望拥有Python Batch(也是守护进程 - 基于HTML的GUI的后端),它将允许用户在这些C ++结构上进行交互操作 - 添加/删除/连接/ ...节点并读取计算结果。
我很乐意选择最好的通讯机制。
强制性功能是:
n1 = node('a'); n2 = n1.add_subnode('b'); n2.ports('test').connect(node('c'))
这样的代码目前我在考虑:
IPC和RPC解决方案看起来不错,但我必须编写一个大包装器来从第1点获取功能。另一方面,我没有找到有关在C ++守护程序中使用Boost.Python的信息,我不知道如果可能的话。
答案 0 :(得分:4)
Boost.Python可用于守护进程。
Thrift和Protocol Buffers工作正常。 Thrift在protobuf实现完整的RPC服务器,除非情况在去年发生了变化,只提供序列化。我个人更喜欢Thrift。
这两个解决方案之间的区别在于速度(Boost.Python肯定更快,但如果你指定正确的套接字选项,那么RPC并不是很慢 - TCP_NODELAY等)以及在Boost.Python的情况下你的二进制取决于在某个版本的Python上。在Thrift的情况下,您具有较少的依赖性,特别是如果Thrift本身作为您的OS分发包安装。无论如何,这是性能和部署的问题。如果不知道通信的速度有多快,以及您将在何处以及如何部署程序,就无法回答。
UPD:你真的需要用C ++编写你的守护进程吗?如果这是因为在图形上执行了大量计算,可能只有计算部分应该在C ++(扩展模块)中?扩展通常优于其他技术。
答案 1 :(得分:1)
我会推荐Cython。它非常体面C++ integration。它为您提供了很多自由,可以轻松地使用C ++,即几乎没有样板。 C ++异常成为Python异常。不过,你可以微调很多东西。你应该尝试一下。