将数据从Django传递到C ++应用程序并返回

时间:2011-09-01 18:59:20

标签: c++ python django architecture quickfix

我们正在创建一个交易应用程序,后端完全采用C ++(使用QuickFix引擎)。我们希望在这个后端的Django上构建一个Web应用程序,用户可以在其中下订单。 Django(python)和C ++应用程序都将在自己的进程和地址空间中运行。您认为将命令/消息从Django传递给C ++的最佳方法是什么?

此外,这是一个交易应用程序,因此延迟是最大的问题。因此,我不想将命令从Django放入数据库,然后从C ++应用程序中获取。

我目前正在考虑通过共享内存或其他一些IPC机制来实现。这是个好主意吗?

4 个答案:

答案 0 :(得分:2)

你必须使用一些IPC方法。你在这里没有提到的是让C ++进程监听套接字。这将增加灵活性(具有轻微的速度成本),即流程甚至不需要在同一台机器上。

我一直在做类似的事情,来自C ++但想要在python中编写UX。我的计算后端是C ++,我编译了一个python模块,并为UX生成了带有烧瓶的html。我的C ++和python生活在同一个过程中,所以我还没有在实践中解决你的核心问题。

我要给出的一条建议是将所有IPC内容保存在C ++中,并使用Boost.Python在C ++中编写一个小的python模块。这将让python进程在pythony世界中完成95%的工作,但是为了将你发送到C ++的数据作为C ++ dev,你可以获得比特级别的信心。 Boost.Python使C ++和python Web框架的桥接变得轻而易举。

答案 1 :(得分:1)

您必须提出现有协议或创建自己的协议,以允许C ++和Python之间的通信。我认为最简单的方法是使用某些IPC,例如ZeroC IceCORBA。或者,你可以throw in a native C++ code into Python使用Django,也可以使用QuickFIX。

如果你真的担心延迟(至少毫秒很重要,不说纳秒) - you shouldn't use QuickFIX或Python。

答案 2 :(得分:1)

我会将zeromq用于IPC

答案 3 :(得分:0)

我可能会选择类似JSON-RPC的东西,并通过本地套接字或命名管道进行通信。

共享内存更快,但如果你必须自己做的话就更难以实现(它意味着并发和锁定,IMO,如果可能的话应该避免。)

这取决于邮件大小和延迟要求。你总是可以尝试一种可以在共享内存上工作的IPC机制,就像下面评论中提到的那样。

(请注意,如果您将来需要对系统进行集群化,那么拥有可以回退到管道/插座上的IPC系统可能是一件好事。)