2009-03-19 7 views
2

私は、アプリケーションがモニターと同時に情報を書き出すようにしたいと考えています。アプリケーションは「組み込み」(Win32 XP上)であるため、制限されたメモリとI/O機能があります。1つのファイルをバッファとして使用できますか?私。同時に書き込みと読み取りを行う

これを行うには、アプリケーションからバッファファイルにデータを書き込み、モニタアプリケーションを使用して同じファイルを読み込む方法が最も簡単です。ライターアプリケーションはC++で、読者は現在Win32 XP上のPythonです。

これを行うライブラリはありますか?誰もこれの例を見たことがありますか?

私はapplcationでデータベースライブラリにリンクしたくないので、データベースを使用する必要はありません。私。スペースがなく、組み込みプラットフォームでサポートされていない可能性があります。

これを行うもう1つの方法はネットワーク接続ですが、図ファイルは最も簡単な方法です。

+0

どのようなOSですか? Unixにはこれを行うパイプがあります。 Pythonにはこれを行うキューがあります。 –

+0

ありがとう、OSが追加されました。問題は組み込みアプリケーションが複数のプラットフォーム上で実行されるため、合理的なパイプがない。ソケットを使用する必要があるかもしれません。ファイルを使用するための良いトリックがあるかどうか疑問に思うだけです。 – Nick

+0

私はソケットが最善の策だと思います、ディスクは_really_遅いI/Oシステムです。 – cobbal

答えて

4

ほとんどのシステムには、パイプやUNIXソケットなど、何をしたいのかに関するいくつかのソリューションがあります。これらは、通常のファイルとは異なり、このためのものです。しかし、普通のファイルでこれを行うプログラムがありますが、これの最も明白な例は、ファイルを "追跡"できるunix-utilityのテールです。


http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx

を見てみましょうPythonはWin32のために良いラッパーライブラリを持っているので、あなたが見るものは、おそらくのpythonからのアクセスが可能。

+0

エミールに感謝します。あなたは、パイプの速度とソケットとの比較を知っていますか? – Nick

+0

私はパイプがかなり高速であることを読むのは控えめな記憶を持っていますが、私はそれに賭けません。しかし、論理的に見えます。あなたのプロジェクトに幸運を祈る! :) –

+0

パイプは共有メモリ内バッファです。 localhostを介して接続されたソケットも共有メモリ内バッファです。パイプのオーバーヘッドはわずかです。 –

1

あなたが話していることは、「プロセス間通信」と呼ばれています。これを行う方法はたくさんあります。

UNIXパイプを使用しています。ソケットを使用して

https://docs.python.org/library/pipes.html

。キューを使用して

https://docs.python.org/library/socket.html

https://docs.python.org/library/queue.html

これらはいずれも、ファイルI/Oよりも優れています。

+0

異なるプロセス間でキューが動作しません。 – bialix

+0

@bialix:ありがとう。キュー自体は解決策ではありません。しかし、私は優れたソリューションがソケット、キュー、およびwsgi_refを使用して構築できると思います。 –

2

mmapという標準のPythonモジュールであるメモリマップファイルを使用できます。

関連する問題