FileLock được sử dụng để chỉ ra một quy trình khác trong ứng dụng của bạn rằng tài nguyên hoặc thư mục làm việc hiện đang được sử dụng. Để làm như vậy, trước tiên hãy tạo FileLock
from filelock import Timeout, FileLock file_path = "high_ground.txt" lock_path = "high_ground.txt.lock" lock = FileLock[lock_path, timeout=1]
Đối tượng khóa hỗ trợ nhiều cách để lấy khóa, bao gồm cả những cách được sử dụng để lấy khóa chuỗi Python tiêu chuẩn
with lock: with open[file_path, "a"] as f: f.write["Hello there!"] lock.acquire[] try: with open[file_path, "a"] as f: f.write["General Kenobi!"] finally: lock.release[] @lock def decorated[]: print["You're a decorated Jedi!"] decorated[]
Phương thức thu được cũng chấp nhận một tham số hết thời gian chờ. Nếu khóa không thể lấy được trong vài giây hết thời gian chờ, một ngoại lệ Hết thời gian chờ sẽ được nâng lên
try: with lock.acquire[timeout=10]: with open[file_path, "a"] as f: f.write["I have a bad feeling about this."] except Timeout: print["Another instance of this application currently holds the lock."]
Các đối tượng khóa là các khóa đệ quy, có nghĩa là sau khi có được, chúng sẽ không chặn các yêu cầu khóa liên tiếp
Đôi khi, bạn có thể cần khóa một tệp hoặc thư mục khỏi ứng dụng hoặc dịch vụ python của mình để ngăn người khác sửa đổi nó. Điều này được yêu cầu đặc biệt nếu nhiều quy trình đang truy cập cùng một tệp. Nói chung, khóa tệp được triển khai bằng các công cụ hệ điều hành trong Linux và Windows. Nhưng đôi khi bạn có thể cần thực thi khóa tệp từ bên trong python. Trong bài viết này, chúng ta sẽ tìm hiểu cách khóa tệp trong python. Bạn có thể sử dụng các bước này trên tất cả các phiên bản Python, từ bên trong các ứng dụng, tập lệnh, dịch vụ dựa trên python của bạn và thậm chí cả các trang web
Cách khóa tệp trong Python
Có một số thư viện có sẵn để khóa tệp. Chúng tôi sẽ sử dụng Portalocker cho mục đích của chúng tôi. Portalocker cung cấp một API dễ dàng để khóa tệp trong python. Nó thậm chí còn hỗ trợ khóa Redis
Đây là lệnh để cài đặt Portalocker
pip install portalocker
Nếu bạn sử dụng Python