C#和CPython之间快速且可扩展的RPC

时间:2012-10-30 15:11:21

标签: c# interface ironpython rpc cpython

我需要一些关于C#的反馈 - cPython集成用于科学应用。

方案如下:C#用于数据采集和可视化 - 用于数据操作的CPython,使用多个和更改第三方库来实现特定于域的任务。

一般用例:

  1. C#代码从设备获取实时数据
  2. C#代码将数据传递给cPython代码并要求详细说明
  3. Cpython代码实现了魔力
  4. Cpython代码将结果传递回c#code
  5. C#可视化WPF应用程序中的数据
  6. c#和cPython代码(第1项),3)和5))都已针对速度进行了优化。 要在两个方向上传递的数据(第2项)和第4))基本上是10E6双数组 (不涉及复杂的数据结构)。

    我想找到一个性能良好的接口解决方案(速度从1到5) 和解耦能力也最小化客户端的开发(c#代码) 侧。 实际上双方都在同一台机器上运行,但我希望解决方案可以扩展。

    我尝试过的解决方案 - 问题:

    • a).NET上的C#+移植python算法 - 写入/重写的代码太多了 在域方面,缺乏专业的库cPython几乎提供了科学方面的一切
    • b)C#在托管代码上嵌入ironpython +包装/移植c ++扩展(有和没有ironclad) - 由算法执行期间使用的结构编组引起的边界性能 - 在升级子组件版本时dll地狱。
    • c)C#在ironpython和python之间嵌入ironpython + rpc - 可维护性问题, 不满意必须在三个C#/ ironpython / python之间“传递”数据。
    • d)XML-RPC,JSON-RPC - 性能(速度)不满意。

    我计划评估的解决方案尚未尝试过:

    提前感谢任何批评,评论和建议。

1 个答案:

答案 0 :(得分:1)

我有类似的要求(C#< - > Python RPC)我刚刚尝试使用Apache Thrift,我印象非常深刻。它非常快:比Pyro4 / pickle慢50%,比RPyC快5倍。这是为了将numpy数组作为二进制数据发送。 Thrift的剩余开销很可能是将数组数据复制到字符串中或从字符串中复制出来。如果可以重构Thrift来取代缓冲区对象代替字符串,我希望它能像Pyro一样快。

代码生成看起来非常干净且API很好。它缺少的主要是文档。不过,我已经能够从基本教程,测试和浏览源代码中找到所有内容。

据我所知,ZeroRPC尚未(还)有C#实现。