python对多个文件加锁脚本
时间: 2024-11-22 13:34:43 浏览: 5
Python中可以使用`threading`模块的`Lock`类来实现对多个文件的加锁操作,以避免并发访问造成的数据混乱。这是一个简单的例子:
```python
import threading
class FileLock:
def __init__(self, filename):
self.lock = threading.Lock()
self.filename = filename
def acquire_lock(self):
while True:
try:
self.lock.acquire()
print(f"Acquired lock for {self.filename}")
break
except threading.LockError:
print(f"Lock already held by another thread, waiting...")
time.sleep(0.1) # 轮询并等待一段时间
def release_lock(self):
self.lock.release()
print(f"Released lock for {self.filename}")
# 使用示例
file_locks = [FileLock(file) for file in ["file1.txt", "file2.txt"]]
for lock in file_locks:
lock.acquire_lock() # 获取锁
with open(lock.filename, 'r') as f:
data = f.read()
# 对文件做处理...
lock.release_lock() # 释放锁
```
在这个脚本中,我们创建了一个`FileLock`类,它有一个内部的线程锁。当我们想要读取或修改文件时,先尝试获取锁,如果锁已经被其他线程持有,就进入等待状态直到锁可用。处理完文件后,记得释放锁。
注意,这只是一个基本的实现,实际应用中可能会有更复杂的场景,比如使用`multiprocessing`库来处理进程间的锁,或者使用`fcntl`等底层函数来提供更低级别的锁。此外,为了防止死锁,应该按照相同的顺序获取和释放锁。
阅读全文