私は同じファイルにテキストを書き込む必要がある複数のpythonスクリプトを持っています。明らかに、私は、データが一貫性があり重複しないことを保証したいと思います。 これを行う最も簡単な(そして最も効率的な)方法はどれですか? 私はクロスプラットフォームのソリューションは必要ありません。Python - 同じファイルへの複数の書き込みアクセスを処理する最も簡単なソリューション
はちょうどモードとして使用し、あなたにopen(*filename,mode*)
ラインで
私は同じファイルにテキストを書き込む必要がある複数のpythonスクリプトを持っています。明らかに、私は、データが一貫性があり重複しないことを保証したいと思います。 これを行う最も簡単な(そして最も効率的な)方法はどれですか? 私はクロスプラットフォームのソリューションは必要ありません。Python - 同じファイルへの複数の書き込みアクセスを処理する最も簡単なソリューション
はちょうどモードとして使用し、あなたにopen(*filename,mode*)
ラインで
* nixプラットフォームを使用していると仮定すると、fcntlを使用してファイルロックを作成できます。また、プラットフォームに依存しないfilelockがありますが、私はこれを使ったことはありません。あなたがロックを解除し、書き込み、とすぐにそれを開いたとして、ファイルをロックしますのfcntlを使用して
。
それは私が必要と思われる。今では私が試しているのは f.open(パス、 'a') fcntl.flock(f、LOCK.EX) f.write( "") fcntl.flock(f、LOCK.UN) f。閉じる() しかし、私は別の質問があります...スクリプトに排他アクセス権があり、別のものが同じものを取得しようとするとどうなりますか?私は一種の優先待ち行列で継続的に再試行したいと思います...しかし、私はこのようにして例外を発生させると思います。 –
基礎となるflock()呼び出しのドキュメントを見てください。 LOCK_NBを使用している場合、呼び出しはブロックされず、Pythonで例外が発生します。そうでない場合、ブロックされます。 – MrJLP
クール!大いに感謝する –
ありがとうございます。これで古い行を削除するのではなく、あなたが書き込む行が追加されます
私はこの方法を使用していますが、データが一貫していることを保証しません。 –
どのようにファイルに書き込んでいますか?彼らはそれぞれ最後に追加されるか、最初から書き直されるのか、その間のどこかにランダムに書き直されるのだろうか?追加するだけで問題があると思わない場合 – MrJLP
最後の文字を削除し、新しいテキストを追加してファイルを閉じる必要があります。 私はf.open(パス、 "a +")とf.write( "テキスト")を使用しています。 スクリプトAがファイルに書き込んでいるときにスクリプトBが同じ処理を実行するとどうなるのでしょうか? 「ロッカー」がない場合、テキストは重なり合う可能性がありますか? –
ファイルロックを使用できます。 – MrJLP