ファイルにロックをかける
Pythonではfcntlモジュールを利用してファイルにロックをかけられます。以下はファイルにロックをかけて解除する方法の簡単なサンプルコードです。
import fcntl
def lock_file(file):
try:
fcntl.flock(file, fcntl.LOCK_EX | fcntl.LOCK_NB)
return True
except BlockingIOError:
return False
def unlock_file(file):
fcntl.flock(file, fcntl.LOCK_UN)
# 打开文件
file = open('example.txt', 'w')
# 尝试给文件上锁
if lock_file(file):
print("文件已上锁")
# 执行文件操作
file.write("Hello, World!")
# 解锁文件
unlock_file(file)
print("文件已解锁")
else:
print("文件已被锁定,无法操作")
上のサンプルでは、`lock_file` 関数はファイルのロックを試行しています。`fcntl.flock()` 関数の第 1 引数はロックするファイル オブジェクトで、第 2 引数はロックの種類です。`fcntl.LOCK_EX` は排他ロック(他のプロセスはファイルにアクセスできない)を意味し、`fcntl.LOCK_NB` は非ブロッキング モード(ファイルがすでにロックされている場合、`fcntl.flock()` 関数は待機するのではなくただちに返ります)を意味します。ロックが成功した場合、関数は `True` を返し、そうでない場合は `False` を返します。
ファイルロックの解除は、unlock_file 関数を使用し、fcntl.LOCK_UN が解除を示します。
実運用時には、必要に応じて適切なエラー・例外処理を行うこと