161:ファイルをロックする
Unix 系 OS では
fcntl モジュールの flock 関数を用います。動作の詳細は OS 依存なので、使用の際にはそのシステムの flock 、 fcntl のドキュメントも参照してください。
import fcntl
def lock(fobj, flag=fcntl.LOCK_SH):
fcntl.flock(fobj.fileno(), flag)
def unlock(fobj):
fcntl.flock(fobj.fileno(), fcntl.LOCK_UN)
flock 関数に使用できるフラグには次のものがあります。
- fcntl.LOCK_SH
- 共有ロックする
- fcntl.LOCK_EX
- 排他ロックする
- fcntl.LOCK_NB
- flock 関数をノンブロッキングで使用する
- fcntl.LOCK_UN
- ロックを解除する
Windows では
PyWin32? を使用して LockFileEx? , UnlockFileEx? を呼び出します。
import win32con, win32file, pywintypes
def lock(fobj, flag=0):
overlapped = pywintypes.OVERLAPPED()
handle = win32file._get_osfhandle(fobj.fileno())
win32file.LockFileEx(handle, flag, 0, 0x7fffffff, overlapped)
def unlock(fobj):
overlapped = pywintypes.OVERLAPPED()
handle = win32file._get_osfhandle(fobj.fileno())
win32file.UnlockFileEx(handle, 0, 0x7fffffff, overlapped)
LockFileEx? のフラグには次のものがあります。
- win32con.LOCKFILE_EXCLUSIVE_LOCK
- 排他ロックする
- win32con.LOCKFILE_FAIL_IMMEDIATETY
- LockFileEx? 関数をノンブロッキングで使用する