MST

星途 面试题库

面试题:Python文件操作并发时的资源竞争与处理

假设多个进程或线程同时对一个文件进行读写操作,会产生资源竞争问题。请阐述在Python中如何使用锁机制(以`multiprocessing`库为例)来避免这种竞争,确保文件操作的一致性。同时,给出一个完整的示例代码,该示例中需要有至少两个进程对同一文件进行不同的写操作,并通过锁来保证操作的正确性。
35.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

1. 阐述锁机制原理

multiprocessing库中,锁(Lock)是一种同步原语。当一个进程获取到锁时,其他进程就必须等待,直到该进程释放锁。这样就确保了在同一时间只有一个进程能够执行被锁保护的代码段,从而避免资源竞争。

2. 示例代码

import multiprocessing


def write_to_file(lock, content):
    with lock:
        with open('test.txt', 'a') as file:
            file.write(content + '\n')


if __name__ == '__main__':
    lock = multiprocessing.Lock()
    p1 = multiprocessing.Process(target=write_to_file, args=(lock, '这是进程1写入的内容'))
    p2 = multiprocessing.Process(target=write_to_file, args=(lock, '这是进程2写入的内容'))

    p1.start()
    p2.start()

    p1.join()
    p2.join()


在上述代码中:

  • 首先定义了write_to_file函数,该函数接受一个锁对象lock和要写入文件的内容content
  • 使用with lock语句获取锁,确保在打开文件写入内容时,其他进程不能同时进行文件写入操作。
  • if __name__ == '__main__':块中,创建了一个锁对象lock,然后创建两个进程p1p2,分别执行write_to_file函数,传入不同的内容。
  • 最后通过start方法启动进程,并使用join方法等待两个进程执行完毕。这样可以保证两个进程对文件的写入操作不会相互干扰。