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

标签 c# interface ironpython rpc cpython

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

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

一般用例:

  1. C#代码从设备获取实时数据
  2. C#代码将数据传递给cPython代码并要求详细说明
  3. Cpython 代码施展魔法
  4. Cpython代码将结果返回给c#代码
  5. C# 在 WPF 应用程序中可视化数据

c# 和 cPython 代码(第 1 项)、3) 和 5)) 都已针对速度进行了优化。 要双向传递的数据(第 2 项和第 4 项))本质上是 10E6 double 组 (不涉及复杂的数据结构)。

我想找到一个性能良好的接口(interface)解决方案(速度从 1 到 5) 和解耦功能,也最大限度地减少了客户端的开发(c# 代码) 边。 实际上双方都在同一台机器上运行,但我希望解决方案能够横向扩展。

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

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

我打算评估的尚未尝试的解决方案:

在此先感谢您的任何批评、意见和建议。

最佳答案

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

代码生成看起来非常干净,API 也很好。它缺少的主要内容是文档。不过,我已经能够从基本教程、测试和浏览源代码中弄清楚一切。

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

关于c# - C# 和 CPython 之间快速且可扩展的 RPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141966/

相关文章:

interface - 鸭子类型(duck typing)在 Go 中打字

python - Visual Studio 2015 IronPython

ironpython - 分发 IronPython 应用程序

c# - Python for .NET : Using same . 多个版本的 NET 程序集

c# - 没有来自外部源的 Id 的 Entity Framework 保存类

c# - 在不限制构造函数访问的情况下控制对象的实例化

c# - 使用 Entity Framework V1 更新外键(实体)

c# - MVC 中的 Razor 页面出现编译错误,未找到 System.Web.Helpers

class - Kotlin 为枚举类值方法定义接口(interface)

naming-conventions - 接口(interface)和版本控制