Tập tin khóa Python linux

Gói này là phần mềm phát hành trước. Giữa các phiên bản 0. 8 và 0. 9 nó đã được thay đổi từ một mô-đun thành một gói. Rất có thể API và việc triển khai sẽ lại thay đổi theo những cách quan trọng khi mọi người kiểm tra nó và cung cấp phản hồi cũng như sửa lỗi. Đặc biệt, nếu sơ đồ khóa dựa trên mkdir là đủ cho cả nền tảng Windows và Unix, thì sơ đồ dựa trên liên kết có thể bị xóa để chỉ sử dụng một sơ đồ khóa duy nhất, cung cấp khả năng hợp tác tệp khóa đa nền tảng

Ghi chú

Việc triển khai sử dụng câu lệnh with , cả trong các thử nghiệm và trong mã chính, vì vậy sẽ chỉ hoạt động ngoài- . 5 hoặc muộn hơn. Tuy nhiên, việc sử dụng câu lệnh with là tối thiểu, vì vậy nếu bạn áp dụng bản vá trong 2. 4. diff bạn có thể sử dụng nó với Python 2. 4. Có thể nó sẽ hoạt động trong Python 2. 3 với bản vá đó cũng được áp dụng, mặc dù mã tài liệu dựa trên các API mới trong 2. 4, vì vậy sẽ phải viết lại một chút để cho phép thử nghiệm trên 2. 3. Như họ nói, các bản vá được chào đón. ;-]

Gói xuất một lớp LockFile cung cấp API đơn giản để khóa tệp. Không giống như msvcrt của Windows. locking[] , Unix fcntl. bầy[] , fcntl. lockf[] và mô-đun posixfile không dùng nữa, API giống hệt nhau trên cả Unix [bao gồm cả Linux và Mac] và . Cơ chế khóa dựa trên bản chất nguyên tử của link[] [trên Unix] và mkdir[] [On Windows] system calls. It also contains several lock-method-specific modules: tệp khóa. linklockfile , lockfile. mkdirlockfilelockfile. sqlitelockfile , mỗi tệp xuất một lớp. Để tương thích ngược với các phiên bản trước 0. 9 LinkFileLock , MkdirFileLockSQLiteFileLock objects are exposed as attributes of the top-level lockfile package, though this use was deprecated starting with version 0.9 and will be removed in version 1.0.

Ghi chú

Việc triển khai hiện tại sử dụng os. link[] trên Unix, nhưng vì chức năng đó không khả dụng trên Windows nên nó sử dụng os. mkdir[] ở đó. Tại thời điểm này, không rõ ràng rằng việc sử dụng os. mkdir[] sẽ không đủ trên các hệ thống Unix. Nếu nó được chứng minh là phù hợp trên Unix thì việc triển khai có thể được đơn giản hóa và thực sự có thể khóa đa nền tảng.

Ghi chú

Việc triển khai hiện tại không cung cấp cho chia sẻ so với. khóa độc quyền. Nhiều quy trình đọc có thể giữ khóa cùng một lúc

Mô-đun xác định các ngoại lệ sau

tệp khóa ngoại lệ. Lỗi

Đây là lớp cơ sở cho tất cả các ngoại lệ do lớp LockFile đưa ra.

tệp khóa ngoại lệ. KhóaLỗi

Đây là lớp cơ sở cho tất cả các ngoại lệ được đưa ra khi cố gắng khóa một tệp

tệp khóa ngoại lệ. Mở khóaLỗi

Đây là lớp cơ sở cho tất cả các ngoại lệ được đưa ra khi cố gắng mở khóa một tệp

tệp khóa ngoại lệ. Thời gian chờ khóa

Ngoại lệ này được đưa ra nếu phương thức được gọi với thời gian chờ hết hạn trước khi khóa hiện tại được giải phóng

tệp khóa ngoại lệ. Đã Khóa

Ngoại lệ này được đưa ra nếu phát hiện tệp đã bị khóa khi ở chế độ không chặn

tệp khóa ngoại lệ. KhóaThất bại

Ngoại lệ này được đưa ra nếu phát hiện một số điều kiện khác [chẳng hạn như thư mục không thể ghi] khiến nó không thể tạo tệp khóa của nó

tệp khóa ngoại lệ. Không bị khóa

Ngoại lệ này được đưa ra nếu tệp không bị khóa khi được gọi

tệp khóa ngoại lệ. NotMyLock

Ngoại lệ này được đưa ra nếu tệp bị khóa bởi một luồng hoặc quy trình khác khi được gọi

Các lớp sau đây được cung cấp

tệp liên kết lớp. LinkLockFile[đường dẫn, luồng=True]

Lớp này sử dụng lệnh gọi hệ thống link[2][] làm cơ chế khóa cơ bản. đường dẫn là một đối tượng trong hệ thống tập tin bị khóa. Nó không cần tồn tại, nhưng thư mục của nó phải tồn tại và có thể ghi được tại thời điểm mua lại[]phát hành[ . luồng là tùy chọn, nhưng khi được đặt thành methods are called. threaded is optional, but when set to True khóa sẽ được phân biệt giữa các luồng trong cùng một quy trình.

lớp symlinklockfile. SymlinkLockFile[đường dẫn, luồng=True]

Lớp này sử dụng lệnh gọi hệ thống symlink[2][] làm cơ chế khóa cơ bản. Các tham số có cùng ý nghĩa và ràng buộc như đối với lớp LinkLockFile .

lớp mkdirlockfile. MkdirLockFile[đường dẫn, luồng=True]

Lớp này sử dụng lệnh gọi hệ thống mkdir[2][] làm cơ chế khóa cơ bản. Các tham số có cùng ý nghĩa và ràng buộc như đối với lớp LinkLockFile .

lớp sqlitelockfile. SQLiteLockFile[đường dẫn, luồng=True]

Lớp này sử dụng mô-đun sqlite3 để triển khai cơ chế khóa. Các tham số có cùng ý nghĩa như đối với lớp LinkLockFile .

tệp khóa lớp. LockBase[đường dẫn, luồng=True]

Đây là lớp cơ sở cho tất cả các triển khai cụ thể và có sẵn ở cấp gói tệp khóa để lập trình viên có thể triển khai các sơ đồ khóa khác

tệp khóa. bị khóa [đường dẫn, thời gian chờ = Không]

Chức năng này cung cấp một trình trang trí đảm bảo chức năng trang trí luôn được gọi với khóa được giữ

Theo mặc định, đối tượng LockFile tham chiếu đến lớp trên Windows. Trên tất cả các nền tảng khác, nó đề cập đến lớp.

Khi khóa một tệp, lớp sẽ tạo một liên kết cứng có tên duy nhất tới một tệp khóa trống. Liên kết cứng đó chứa tên máy chủ, id tiến trình và nếu khóa giữa các luồng được phân biệt, mã định danh luồng. Ví dụ: nếu bạn muốn khóa quyền truy cập vào một tệp có tên là “README”, thì tệp khóa đó có tên là “README. Khóa". Với khóa mỗi luồng được bật, liên kết cứng được đặt tên là HOSTNAME-THREADID-PID. Khi chỉ bật khóa theo quy trình, liên kết cứng được đặt tên là HOSTNAME–PID

Khi sử dụng lớp, tệp khóa là một thư mục. Đề cập đến ví dụ trên, README. lock sẽ là một thư mục và HOSTNAME-THREADID-PID sẽ là một tệp trống trong thư mục đó

Xem thêm

Mô-đun msvcrt Cung cấp chức năng locking[] , . Mô-đun posixfile Không dùng nữa [kể từ Python 1. 5] cách khóa tệp trên hệ thống Posix. Mô-đun fcntl Cung cấp cách tốt nhất hiện nay để khóa tệp trên hệ thống Unix [ lockf[] and flock[]].

Khóa đối tượng tệp

LockFile hỗ trợ giao thức được sử dụng bởi câu lệnh. với tuyên bố. Tùy chọn thời gian chờ không được hỗ trợ khi được sử dụng theo cách này. Mặc dù có thể triển khai hỗ trợ cho thời gian chờ, nhưng không có hỗ trợ nào để xử lý các ngoại lệ Hết thời gian cuối cùng do __enter__[ . Cấu trúc kết quả sẽ không đơn giản hơn là chỉ sử dụng câu lệnh method, so you would have to protect the with statement with a try statement. The resulting construct would not be any simpler than just using a try ngay từ đầu.

LockFile có các phương thức mà người dùng có thể nhìn thấy sau đây.

KhóaTệp. có được [thời gian chờ = Không]

Khóa tệp được liên kết với đối tượng LockFile . Nếu thời gian chờ bị bỏ qua hoặc Không có thì người gọi sẽ chặn cho đến khi tệp được mở khóa bởi đối tượng hiện đang giữ khóa. Nếu thời gian chờ bằng 0 hoặc số âm, ngoại lệ sẽ được đưa ra nếu tệp hiện đang bị khóa bởi một quy trình hoặc luồng khác. Nếu thời gian chờ là dương, người gọi sẽ chặn trong nhiều giây đó để chờ mở khóa. Nếu khóa không được giải phóng trong khoảng thời gian đó, ngoại lệ sẽ được nâng lên.

KhóaTệp. phóng thích[]

Mở khóa tệp được liên kết với đối tượng LockFile . Nếu tệp hiện không bị khóa, ngoại lệ sẽ được nâng lên. Nếu tệp bị khóa bởi một luồng hoặc quá trình khác, ngoại lệ sẽ được đưa ra.

tệp khóa. bị khóa[]

Trả về trạng thái khóa trên tệp hiện tại. Nếu bất kỳ quy trình hoặc luồng nào [bao gồm cả quy trình hiện tại] đang khóa tệp, thì True được trả về, nếu không thì Sai< . is returned.

tệp khóa. break_lock[]

Nếu tệp hiện đang bị khóa, hãy phá vỡ nó

tệp khóa. i_am_locking[]

Trả về true nếu người gọi giữ khóa

ví dụ

Ví dụ này là “hello world” cho gói

from lockfile import LockFile
lock = LockFile["/some/file/or/other"]
with lock:
    print lock.path, 'is locked.'

Để sử dụng cái này với Python 2. 4, bạn có thể thực hiện

from lockfile import LockFile
lock = LockFile["/some/file/or/other"]
lock.acquire[]
print lock.path, 'is locked.'
lock.release[]

Nếu bạn không muốn đợi mãi, bạn có thể thử

from lockfile import LockFile
lock = LockFile["/some/file/or/other"]
while not lock.i_am_locking[]:
    try:
        lock.acquire[timeout=60]    # wait up to 60 seconds
    except LockTimeout:
        lock.break_lock[]
        lock.acquire[]
print "I locked", lock.path
lock.release[]

Bạn cũng có thể đảm bảo rằng khóa luôn được giữ khi các chức năng được trang trí phù hợp được gọi

from lockfile import locked
@locked["/tmp/mylock"]
def func[a, b]:
    return a + b

Thư viện khác

Ý tưởng triển khai khóa cố vấn bằng API tiêu chuẩn không phải là mới với. Có một số thư viện khác có sẵn

Làm cách nào để khóa một tệp trong Linux?

Để kích hoạt khóa tệp bắt buộc trong Linux, hai yêu cầu phải được đáp ứng. .
Chúng ta phải gắn hệ thống tệp bằng tùy chọn mand [mount -o mand FILESYSTEM MOUNT_POINT]
Chúng ta phải bật bit set-group-ID và tắt bit thực thi nhóm cho các tệp mà chúng ta sắp khóa [chmod g+s,g-x FILE]

Lockfile cho Python là gì?

Gói lockfile cung cấp khả năng khóa tệp tư vấn độc lập với nền tảng cho các ứng dụng Python . Một số cơ chế khóa khác nhau được hỗ trợ bằng API chung. Ghi chú. Nguồn hiện có sẵn từ GitHub.

Làm cách nào để cài đặt FileLock trong Python?

Gõ "cmd" vào thanh tìm kiếm và nhấn Enter để mở dòng lệnh. Cái này là cái gì? . Thao tác này sẽ cài đặt khóa tệp cho cài đặt Python mặc định của bạn. Type “ pip install filelock ” [without quotes] in the command line and hit Enter again. This installs filelock for your default Python installation.

Làm cách nào để khóa một thư mục trong Python?

Đặt đường dẫn tệp khóa quản lý. lockPath [Không có, đường dẫn]. Đường dẫn tệp khóa . Nếu Không được cung cấp, tệp khóa sẽ tự động được tạo thành '. lock' trong thư mục filePath.

Chủ Đề