1

すべてのデータをファイルに書き込むJavaで書かれたコードがあり、このデータを処理するpythonスクリプトがあります。

それらは完全に個別に実行され、Python スクリプトはスケジュールで実行できますが、ファイルから処理されたレコードも削除されます。問題は、最初のプロセスからの Java コードが何かを書き込もうとし、2 番目のプロセスからの Python コードが処理されたレコードを削除しようとするときのファイルへのアクセスの実装にありますか?

最初に考えられたのは、プロセスの 1 つがファイルを更新するときに .lock ファイルを物理的に作成することでしたが、おそらく他に考慮すべき解決策がいくつかありますか?

ありがとうございました。

4

3 に答える 3

2

あなたの最善の策は、ファイルの使用をやめてソケットを使用することかもしれません。Java プログラムは、Python スクリプトがリッスンするまで、出力を生成してキャッシュします。次に、Python スクリプトがデータを受け取り、処理します。

別の方法として、2 つのプロセス間で IPC シグナリングを使用することもできますが、これはソケットよりもはるかに面倒に思えますが、私見です。

それ以外の場合は、.lock ファイルが最善の策のようです。

于 2013-03-26T16:53:28.600 に答える
0

1 つのメカニズムは、プロデューサにファイルを新しい名前 (おそらくHHMMSSサフィックス付き) に頻繁にロールさせ、コンシューマにファイルが新しい名前にロールされた後にのみ処理させることです。たぶん5分ごと?

もう 1 つのメカニズムは、コンシューマーにファイル自体をロールさせ、プロデューサーにファイルがロールされたことを通知させ、元のファイル名を再度開くようにすることです。したがって、消費者は常に何かから消費しoutput.consume、生産者は常に何かに書き込んでいoutputます。

  • ファイルに行が書き込まれるたびに、プロデューサーはそれが存在することを確認しoutputます。
  • 消費者がファイルを読み取る準備ができたら、名前を or に変更outputoutput.consumeます。
  • outputプロデューサーはファイルが存在しないことに気づき、出力用にファイルを再度開きます。
  • outputファイルが再作成されると、コンシューマはファイルを処理できますoutput.comsume
于 2013-03-26T16:47:38.127 に答える
0

Java と Python の両方のメソッドが完了したら、必ずファイルを閉じてください。

1 つの可能性は、Python スクリプトを Jython に変換することです。両方のプロセスが JVM で実行されている場合は、標準の Java 同時実行技術を使用して、両方のスレッドがファイルを同時に変更しないようにする必要があります。

于 2013-03-26T16:47:54.663 に答える