9

C と Python の 2 つのプロセスを持つアプリケーションがあります。C プロセスは、すべての面倒な作業が行われる場所であり、Python プロセスはユーザー インターフェイスを処理します。

C プログラムは 1 秒間に 4 回、大きなバッファーに書き込み、Python プロセスはこのデータを読み取ります。この時点まで、Python プロセスへの通信は AMQP によって行われています。オーバーヘッドを減らしてパフォーマンスを向上させるために、2 つのプロセス間でメモリを共有するようにセットアップすることをお勧めします。

ここでのオプションは何ですか? 理想的には、Python プロセスに物理メモリを直接 (ディスクからではなくメモリから) 読み取らせてから、セマフォなどで競合状態を処理するだけです。ただし、これは私がほとんど経験していないことなので、できる限りの助けをいただければ幸いです。

私はLinuxを使用しています。

4

3 に答える 3

2

提案 #1: 最も簡単な方法は、TCP を使用することです。データサイズが大きいとおっしゃいました。データ サイズが大きすぎない限り、TCP を使用しても問題ありません。TCP 経由でデータを送受信するために、C と Python で別々のスレッドを作成してください。

提案 #2: Python は C のラッパーをサポートしています。人気のあるラッパーの 1 つは ctypesです- http://docs.python.org/2/library/ctypes.html

共有メモリを介した 2 つの C プログラム間の IPC に精通していると仮定すると、共有メモリからデータを読み取る Python プログラム用の C ラッパーを作成できます。

Python と C++ の間の IPC について説明している次の diccussion も確認してください: C++ と Python の間の単純な IPC (クロスプラットフォーム)

于 2013-04-26T08:45:36.997 に答える
0

ウェイトリフティングのコードを C のライブラリとして書き、Python モジュールをそのラッパーとして提供するのはどうですか? これは実際には非常に一般的なアプローチであり、特に、Python でプロトタイピングとプロファイリングを行い、パフォーマンスが重要な部分を C に移行することができます。

どうしても 2 つのプロセスが必要な場合は、そのような IPC タスクを容易にする Python の XMLRPC パッケージがあります。いずれにせよ、パフォーマンスがそれを必要とすることを本当に証明できない限り、独自の IPC を発明する代わりに既存のフレームワークを使用してください。

于 2013-04-20T14:12:29.330 に答える