在Python中,可以使用fcntl
模块来实现文件锁
import fcntl import os def lock_file(file_path, lock_type): with open(file_path, 'r+') as file: # 获取文件描述符 fd = file.fileno() # 使用fcntl模块加锁 try: fcntl.flock(fd, lock_type) print(f"成功获取{lock_type}锁") except IOError as e: print(f"无法获取{lock_type}锁: {e}") def unlock_file(file_path): with open(file_path, 'r+') as file: # 获取文件描述符 fd = file.fileno() # 使用fcntl模块解锁 try: fcntl.flock(fd, fcntl.LOCK_UN) print("成功释放锁") except IOError as e: print(f"无法释放锁: {e}") # 使用示例 file_path = 'example.txt' lock_file(file_path, fcntl.LOCK_EX) # 获取独占锁 # 在这里进行文件操作 unlock_file(file_path) # 释放锁
在这个示例中,我们定义了两个函数:lock_file
和unlock_file
。lock_file
函数接受一个文件路径和一个锁类型(fcntl.LOCK_EX
表示独占锁,fcntl.LOCK_SH
表示共享锁,fcntl.LOCK_UN
表示解锁),然后使用fcntl.flock()
函数加锁。unlock_file
函数只需传入文件路径,然后使用相同的fcntl.flock()
函数解锁。
注意:文件锁并不能完全阻止其他进程访问文件内容,它只是一种协同机制,用于在多个进程之间协调对文件的访问。因此,所有涉及的进程都应该遵循相同的文件锁定规则。