私はWeb経由でアクセスされるpythonスクリプトに取り組んでいるので、複数のユーザーが同時に同じファイルに追加しようとするでしょう。これは、複数のユーザーが同時に同じファイルに書き込んだ場合に、ファイルが破損する可能性がある競合状態。
例えば:
#!/usr/bin/env python
g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close
この操作は危険に見えるので、ロックファイルを使用する必要がありますか?.
import fcntl
new_entry = "foobar"
with open("/somepath/somefile.txt", "a") as g:
fcntl.flock(g, fcntl.LOCK_EX)
g.write(new_entry)
fcntl.flock(g, fcntl.LOCK_UN)
一部のシステムでは、小さなバッファーのみを書き込む場合、ロックが必要ないことに注意してください。これらのシステムでは が追加されるためですアトミック 。
Linuxでこの操作を実行していて、キャッシュサイズが4KBより小さい場合、書き込み操作はアトミックであり、問題ありません。
ここでさらに読む:NIXでファイル追加はアトミックですか?
プラットフォーム/ファイルシステムの場所によっては、これは安全な方法(NFSなど)では実行できない場合があります。おそらく、別のファイルに書き込んで結果を後でマージできますか?
使用しているプラットフォームは明記していませんでしたが、クロスプラットフォームで使用できるモジュールを次に示します。 Pythonでのファイルロック