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 double の配列です (複雑なデータ構造は含まれません)。

優れたパフォーマンス (1 から 5 への速度) と、クライアント (c# コード) 側での開発を最小限に抑えるデカップリング機能を備えたインターフェイス ソリューションを見つけたいと思います。実際には両方の側が同じマシンで実行されますが、ソリューションをスケールアウトしたいと思います。

私が試した解決策 - 問題:

  • a) C# + .NET での python アルゴリズムの移植 - ドメイン側で書く/書き直すコードが多すぎる、cPython が科学的側面のほとんどすべてを提供する特殊なライブラリがない
  • b) C# の埋め込み ironpython + マネージ コードでの C++ 拡張のラッピング/移植 ( ironclad の有無にかかわらず) - アルゴリズムの実行中に使用される構造のマーシャリングによって引き起こされるボーダーライン パフォーマンス - サブコンポーネントのバージョンをアップグレードするときの dll 地獄。
  • c) ironpython と python の間に ironpython + rpc を埋め込む C# - 保守性の問題、3 つの C#/ironpython/python 間でデータを「渡す」必要があるため満足できない。
  • d) XML-RPC、JSON-RPC - パフォーマンス (速度) に満足していません。

私が評価する予定のまだ試していないソリューション:

  • e) アパッチスリフト
  • f) ZeroRPC

批判、コメント、提案をお寄せいただきありがとうございます。

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 に答える