引言
在Python中编写多进程间共同读写文件的过程中,需要对文件句柄进行互斥操作,否则造成文件读写混乱或者损坏。在Posix环境下(Linux/Unix)下,可以直接调用fcntl模块进行控制,Windows平台没有该模块,只能通过安装 pywin 模块,调用系统的 API进行互斥操作了。
代码如下:
import os
import win32con, win32file, pywintypes
LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
LOCK_SH = 0 # The default value
LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
__overlapped = pywintypes.OVERLAPPED( )
def lock(file, flags):
hfile = win32file._get_osfhandle(file.fileno( ))
win32file.LockFileEx(hfile, flags, 0, 0xffff0000, __overlapped)
def unlock(file):
hfile = win32file._get_osfhandle(file.fileno( ))
win32file.UnlockFileEx(hfile, 0, 0xffff0000, __overlapped)
创建fcntl.py文件将此段代码放入,导入py到需要的代码中调用lock和unlock函数进行多进程文件加锁解锁。