欢迎访问宙启技术站
智能推送

在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可以实现多个进程对同一文件进行安全操作,确保同一时间只有一个进程能够访问文件。