面试题答案
一键面试设计思路
- 锁机制:使用锁(如
threading.Lock
)来确保在同一时间只有一个线程可以进行文件写入操作,从而保证写入的原子性。 - 错误处理机制:在文件写入操作时,使用
try - except
语句捕获可能出现的异常,如文件不存在、权限不足等,确保写入的正确性。 - 减少锁带来的性能损耗:尽量缩短持有锁的时间,只在实际进行文件写入操作时加锁,避免在其他无关操作上持有锁。
Python代码示例
import threading
# 创建一个锁对象
file_lock = threading.Lock()
def write_to_file(file_path, content):
try:
# 获取锁
file_lock.acquire()
with open(file_path, 'a') as file:
file.write(content + '\n')
except Exception as e:
print(f"写入文件时发生错误: {e}")
finally:
# 释放锁
file_lock.release()
# 模拟多线程写入
threads = []
file_path = 'test.txt'
contents = ["line1", "line2", "line3"]
for content in contents:
thread = threading.Thread(target=write_to_file, args=(file_path, content))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
在上述代码中:
file_lock
是一个threading.Lock
对象,用于控制对文件的访问。write_to_file
函数负责写入文件。在函数内部,首先使用file_lock.acquire()
获取锁,确保同一时间只有一个线程能进入文件写入部分。- 使用
try - except
块捕获可能的异常。 - 最后,无论是否发生异常,都使用
file_lock.release()
释放锁,保证锁一定会被释放,避免死锁。 - 通过创建多个线程并启动,模拟多线程环境下的文件写入操作。每个线程调用
write_to_file
函数进行文件写入。