Hướng dẫn python fcntl.flock example - ví dụ python fcntl.flock

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

"" "
Ví dụ về việc sử dụng fcntl.flock để khóa tệp. Một số mã lấy cảm hứng từ mô -đun Filelock.
"" "
Ví dụ về việc sử dụng fcntl.flock để khóa tệp. Một số mã lấy cảm hứng từ mô -đun Filelock. os
Nhập khẩu fcntl
Nhập khẩufcntl time
nhập khẩu acquire(lock_file):
defacquire (lock_file): = os.O_RDWR | os.O_CREAT | os.O_TRUNC
open_mode = os.o_rdwr | os.o_creat | os.o_trunc = os.open(lock_file, open_mode)
fd = os.open (lock_file, open_mode) = os.getpid()
lock_file_fd=None = None
timeout=5.0 = 5.0
pid = os.getPid () = current_time = time.time()
whilecurrent_time current_time < start_time + timeout:
start_time = current_time = Time.time ():
thử:
# Lock_ex có nghĩa là chỉ có một quy trình có thể giữ khóa
# Lock_nb có nghĩa là fcntl.flock () không chặn
# và chúng tôi có thể thực hiện chấm dứt trong khi vòng lặp,
# Khi hết thời gian chờ.
# Thông tin thêm ở đây:
# https://docs.python.org/3/l Library/fcntl.html#fcntl.flock.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
fcntl.flock (fd, fcntl.lock_ex | fcntl.lock_nb) (IOError, OSError):
Ngoại trừ (Ioerror, Oserror):
đi qua:
lock_file_fd=fd = fd
break
khác:(f' {pid} waiting for lock')
in (f '{pid} đang chờ khóa').sleep(1.0)
thời gian.s ngủ (1.0) = time.time()
current_time = Time.time () lock_file_fd is None:
iflock_file_fdisnone:.close(fd)
returnlock_file_fd lock_file_fd
OS.CLOSE (FD) release(lock_file_fd):
DEFRELEASE (LOCK_FILE_FD):
# Không xóa Lockfile:
#
# https://github.com/benediktschmitt/py-filelock/issues/31
# https://stackoverflow.com/questions/17708885/flock-removing-locked-file-without-race-to-con.flock(lock_file_fd, fcntl.LOCK_UN)
fcntl.flock (lock_file_fd, fcntl.lock_un).close(lock_file_fd)
Os.close (Lock_File_FD) None
trả lại main():
fd = os.open (lock_file, open_mode) = os.getpid()
pid = os.getPid ()(f'{pid} is waiting for lock')
start_time = current_time = Time.time () = acquire('myfile.lock')
thử: fd is None:
# Lock_ex có nghĩa là chỉ có một quy trình có thể giữ khóa(f'ERROR: {pid} lock NOT acquired')
return-1 -1
# Lock_nb có nghĩa là fcntl.flock () không chặn(f"{pid} lock acquired...")
# và chúng tôi có thể thực hiện chấm dứt trong khi vòng lặp,.sleep(2.0)
# Khi hết thời gian chờ.(fd)
# Thông tin thêm ở đây:(f"{pid} lock released")
# https://docs.python.org/3/l Library/fcntl.html#fcntl.flock
fcntl.flock (fd, fcntl.lock_ex | fcntl.lock_nb) __name__ == '__main__':
Ngoại trừ (Ioerror, Oserror):()