質問

Helllo、Pythonとプロセスの間で少量のデータ(<1k)を共有したいと思います。データは物理的な PC/104 IO データであり、急速かつ頻繁に (24 時間 365 日) 変化します。単一の「サーバー」がデータを書き込み、複数のクライアントがその一部を読み取ります。これを実行するシステムはハードドライブではなくフラッシュメモリ(CFカード)を使用するため、ファイルベースのスキームではフラッシュメモリの消耗が心配です。また、100% 太陽光発電で賄っているため、消費電力 (プロセッサー時間) も削減したいと考えています。

  • これは正当な心配でしょうか?CFカードをSSDに変更することも考えられます。
  • mmap を使用して値を変更すると、データは物理的にディスクに書き込まれますか、それともこれは仮想ファイルですか?
  • Debian 上で実行する予定なので、おそらく Python モジュール用の POSIX IPC が最適なソリューションです。誰か使ったことありますか?
  • 誰か試してみましたか Python オブジェクト共有 (POSH) モジュール?一見すると有望に見えますが、まだ「アルファ」段階にあり、積極的に開発されているわけではないようです。

ありがとう

アップデート:最大データ更新レートを約 10 Hz まで遅くしましたが、より一般的には 1 Hz です。クライアントには、一定の更新レートではなく、値が変更された場合にのみ通知されます。私たちは、各サーバーが特定のタイプの機器または機能に特化する、複数サーバー/複数クライアント モデルに移行しました。プログラミングの大部分は Java プログラマーによって行われることが判明したため、最終的には JSON-RPC over TCP を使用することになりました。サーバーは Java で書かれる予定ですが、メインのクライアントは Python で書きたいと考えており、JSON-RPC の実装を検討しています。

役に立ちましたか?

解決

サーバープロセスでファイルにデータを書き込みする代わりに、直接クライアントプロセスへの書き込みになります。

を使用するUNIXドメインソケット(またはTCP / IPソケットクライアントが異なるマシン上で実行した場合)、サーバに各クライアントを接続し、それらのソケットにサーバーの書き込みを持っています。あなたの特定の処理モデルに応じて、クライアント/ソケットを選択することは、サーバ(例えばラウンドロビン)によって、または、彼らはより多くの準備ができていることを知らせるクライアントによって行うことができる。

他のヒント

ramfsパーティションを作成し、それに書き込みます。 (あなたはtmpfsのを使用することができますが、tmpfsのとは異なり、ramfsは、ディスクにスワップされていません)。 ramfsはサイズ制限はありませんしかし、あなたはメモリが不足しないように注意しなければなりません。あなただけがデータのほんの少しを書いているので、問題になることはありません。

この方法では、あなたのデータはこれまで(注意:電源に障害が発生した場合は、それらを失うことになる)ディスクに書き込まれることはありません。

ramfsのドキュメントをも参照してください。

フラッシュ・システム上で実行している場合は、ファイルシステムをフラッシュメモリ(ウェアレベリング)の寿命を最大化するために、適切に設計されていることを確認します。 JFFS と、私は信じて、他の人は今、これを効果的に行うことが可能です。あなたは、このようなシステムを使用する場合は、フラッシュを使用する方法について過度に心配するべきではありませんが、確かに一定のデータの流れを書いている場合は、フラッシュの上にそれを行う避けたいと思います。

RAMファイルシステムを使用することは良いアイデアです。いっそのシステム設計があなたをできるようになる場合は、完全にファイルシステムを回避することです。そのために、あなたはPOSHに言及します。私はそれを試したことがありませんが、私たちが見つけたパイロする(「Pythonのリモートオブジェクト」 )いくつかの類似事例にエレガントで効果的なソリューションであることが

そして、もちろん、それはプロセス間の通信方法の面でいくつかの類似点を負い標準ライブラリmultiprocessingモジュールは、あります。私はそれが出てパンに失敗した場合にのみ、この領域での新たな開発が開始され、別の場所に行くと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top