在Python中使用FileLock()实现多个进程对同一文件进行安全操作
发布时间:2024-01-02 08:28:51
在Python中,可以使用FileLock模块来实现对同一文件进行安全操作。FileLock提供了文件锁功能,可以确保同一时间只有一个进程可以对文件进行读写操作,其他进程必须等待。
下面是一个使用FileLock实现多个进程对同一文件进行安全操作的例子:
import os
from filelock import FileLock
def write_to_file(file_path, data):
lock_path = file_path + ".lock"
lock = FileLock(lock_path)
with lock:
with open(file_path, "a") as file:
file.write(data + "
")
def read_from_file(file_path):
lock_path = file_path + ".lock"
lock = FileLock(lock_path)
with lock:
with open(file_path, "r") as file:
lines = file.readlines()
return lines
if __name__ == "__main__":
file_path = "data.txt"
processes = []
data = "Hello, World!"
# 创建多个进程同时写入文件
for _ in range(5):
pid = os.fork()
if pid == 0:
write_to_file(file_path, data)
os._exit(0) # 子进程结束
else:
processes.append(pid)
# 等待子进程结束
for pid in processes:
os.waitpid(pid, 0)
# 读取文件内容
lines = read_from_file(file_path)
print("File content:")
for line in lines:
print(line.strip())
在上述代码中,首先导入了FileLock模块,并定义了写入文件和读取文件的函数。这两个函数都接受文件路径作为参数,并在操作文件前后用FileLock进行了加锁和解锁。
在主程序中,创建了5个子进程同时写入文件。每个子进程通过调用write_to_file函数写入数据。主进程通过调用os.waitpid()等待子进程结束。
最后,主进程调用read_from_file函数读取文件内容,并打印出来。
这样,使用FileLock可以实现多个进程对同一文件进行安全操作,确保同一时间只有一个进程能够访问文件。
