Python中基于FileLock()实现文件并发读写控制
发布时间:2024-01-02 08:28:36
在Python中,FileLock模块提供了一种简单的方式来实现文件的并发读写控制。FileLock()函数可以在一个锁定文件上创建一个锁,并确保在使用文件时只有一个进程可以访问它。这对于多个进程同时读写同一个文件时非常有用。
下面是使用FileLock()实现文件并发读写控制的例子:
import os
import time
from filelock import FileLock
# 创建一个文件锁
lock = FileLock("test.lock")
def read_file(filename):
with lock: # 获取文件锁
with open(filename, "r") as file:
print(f"Reading file {filename}...")
time.sleep(2) # 模拟读取耗时
content = file.read()
print(f"File content: {content}")
def write_file(filename, data):
with lock: # 获取文件锁
with open(filename, "w") as file:
print(f"Writing to file {filename}...")
time.sleep(2) # 模拟写入耗时
file.write(data)
print(f"Data written: {data}")
# 创建一个测试文件
with open("test.txt", "w") as file:
file.write("Initial content")
# 启动两个进程读取和写入文件
pid = os.fork()
if pid == 0: # 子进程
read_file("test.txt") # 子进程读取文件
else: # 父进程
write_file("test.txt", "New content") # 父进程写入文件
os.waitpid(pid, 0) # 等待子进程结束
# 删除测试文件
os.remove("test.txt")
在这个例子中,我们首先导入了os和time模块,以及FileLock类。然后我们创建了一个FileLock对象来控制文件的访问。
接下来,我们定义了两个函数,read_file和write_file,用于读取和写入文件。这两个函数在使用文件之前先获取锁,确保只有一个进程可以访问文件。在函数结束时,锁会自动释放。
然后,我们在程序的主体部分创建了一个测试文件,并启动了两个进程来读取和写入文件。子进程调用read_file函数来读取文件内容,而父进程调用write_file函数来写入新的内容。父进程使用os.waitpid()函数来等待子进程结束。
最后,我们删除了测试文件。
这个例子展示了使用FileLock()实现文件并发读写控制的基本原理。通过使用这个库,我们可以确保在多个进程同时读写同一个文件时不会出现冲突。
