面试题答案
一键面试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
,然后创建两个进程p1
和p2
,分别执行write_to_file
函数,传入不同的内容。 - 最后通过
start
方法启动进程,并使用join
方法等待两个进程执行完毕。这样可以保证两个进程对文件的写入操作不会相互干扰。