2017-09-14 5 views
0

私はいくつかの行のデータを削除することができるファイル(csv、json、txt、フォーマットを決めていない)を使用しようとしています。pythonスクリプトは実行するcron上にあります新しいものがあれば5分ごとにファイルをチェックし、もしあればそれを処理し、処理されるごとに各行を削除します。ファイルを編集するpythonスクリプト

プロセスがデータをつかんで、ファイルを空にしますが、私の保存にそれを書き戻すことで来ている間、私は、私はファイルを開く事態を防止するため、いくつかの変更を行い、それを保存しようとしています。

を私は考えましたこの安全にするための唯一の方法は、フォルダを処理して新しいファイルを探すことです。すべての変更は新しいファイルにドロップされます。したがって、このような事態の危険は決してありません。

良い方法がありますか、これが最善の方法ですか?

+1

これがあなたが探しているものかどうかわからない:https://stackoverflow.com/questions/30407352/how-to-prevent-a-race-condition-when-multiple-processes-attempt-to-write-to- – RetardedJoker

+0

私は上記の提案を2番目に挙げています。ファイルシステムレベルのロックはこの目的には十分です。また、ファイルシステムがそれをサポートしている場合、inotifyイベントを扱うデーモンとしてpythonスクリプトを実行することもできます。 [この記事のinotifyおよびクロスプラットフォームソリューションの提案](https://stackoverflow.com/q/12582720/1328439)を参照してください。 –

答えて

0

あなたは、以下の手順を使用することができます。ファイルが他のプロセスによって開かれている場合はcronで実行

  1. Pythonスクリプトをチェックします。 Linuxでは、lsofを使って実行できます。
  2. ファイルが開いている場合、cronを実行すると、ファイルデータは処理されません。
  3. 他のスクリプトによってファイルが使用されている場合、同じロジックでファイルにデータを追加するスクリプトを追加できます。
1

チェックthis answer to see if the file is already open、それがある場合、例えば、もはや4分以上、ちょうどまで5分以上待つか、あるいは内部で眠ると、それが動作するまで再び10秒ごとをしてみてください、しかし:

for i in range(attempts): 
    if not fileInUse(): 
     processFile() 
    else: 
     time.sleep(10) 
関連する問題