2

我需要一些关于 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 双精度数组(不涉及复杂的数据结构)。

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

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

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

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

提前感谢您的任何批评、意见和建议。

4

1 回答 1

1

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

代码生成看起来很干净,API 也很好。它缺少的主要是文档。尽管如此,我还是能够从基本教程、测试和浏览源代码中弄清楚一切。

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

于 2013-11-06T09:14:35.483 回答