#test.py
import fcntl
import os
import time
def acquire_lock(filename):
fd = os.open(filename, os.O_RDWR | os.O_CREAT)
try:
fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
except BlockingIOError:
print("File is locked by another process.")
os.close(fd)
return None
return fd
def release_lock(fd):
if fd is not None:
fcntl.flock(fd, fcntl.LOCK_UN)
os.close(fd)
filename = './**/myLockfile'
while True:
fd = acquire_lock(filename)
if fd is not None:
print("Get lock.")
# 执行需要对文件的操作
# ...
time.sleep(10)
release_lock(fd)
这样多进程操作共享资源时可以使用锁保护
例如,可见两个进程互相独占锁的过程:
terminal0:python3 test.py
terminal1:python3 test.py