Tệp khóa Python Linux

Oscar Benjamin

2012-10-18 13. 58. 48 UTC

liên kết cố định

Bài đăng của andrea crotti

Bài đăng của Grant Edwards
Khóa tệp trong Unix trước đây là "lời khuyên". Điều đó có nghĩa là
các chương trình phải _chọn_ chú ý đến chúng. Hầu hết
chương trình không.
Linux hỗ trợ khóa bắt buộc, nhưng nó hiếm khi được sử dụng và phải được
kích hoạt thủ công ở cấp hệ thống tệp. Có thể đáng lưu ý
rằng trong tài liệu nhân Linux, tài liệu về bắt buộc khóa tệp
bắt đầu bằng phần có tiêu đề "Tại sao bạn nên tránh bắt buộc khóa".
http. // vi. wikipedia. org/wiki/File_locking#In_Unix-like_systems
http. // nhân. org/doc/Tài liệu/hệ thống tập tin/khóa. txt
http. // nhân. org/doc/Tài liệu/hệ thống tập tin/khóa bắt buộc. txt
http. //www. thegeekstuff. com/2012/04/linux-file-locking-types/
http. //www. hackinglinuxexposed. com/bài viết/20030623. html
--
Grant Edwards. b. edward yow. CHEEKS của bạn giống như
tại cặp NECTARINES phía trên
gmail. com một MIỆNG không biết
RÀNG BUỘC --
--
http. //thư. con trăn. org/mailman/listinfo/python-list

Uhh I see thanks, I guess I'll use the good-old .lock file (even if it
might have some problems too).

Tôi nghĩ bạn đã hiểu nhầm ý của Grant.

Bài đăng của andrea crotti
Dù sao thì tôi chỉ e rằng chính ứng dụng của mình có thể sửa đổi
tệp, vì vậy có lẽ tôi có thể .

Trong trường hợp đó, fcntl sẽ phù hợp với bạn. Vấn đề là fcntl chỉ
khóa tệp nếu tất cả các ứng dụng truy cập tệp đều sử dụng
fcntl. Bất kỳ ứng dụng nào khác như vim có thể chỉ cần bỏ qua khóa fcntl
. Hãy đọc các liên kết mà Grant đã đăng.

Bạn đã thử viết hai lần từ cùng một ứng dụng sử dụng fcntl chưa?

Bài đăng của andrea crotti
Hoặc có thể sử dụng sqlite cũng được
processes?

That would also work.


Oscar

Oscar Benjamin

2012-10-18 15. 04. 43 UTC

liên kết cố định

Bài đăng của andrea crotti

Bài đăng của Grant Edwards
Nếu những gì bạn đang đề phòng là nhiều phiên bản của
application modifying the file, then either of the advisory file
locking schemes or the separate lock file should work fine.

Ok so I tried a small example to see if I can make it fail, but this
below just works perfectly fine.
Maybe it's too fast and it release the file in time, but I would
expect it to take some time and fail instead..

Tại sao không nghĩ ra một thử nghiệm thực sự cho bạn thấy liệu nó có hiệu quả không? .
are two suggestions:

1) Thời gian sử dụng. sleep() để bạn biết khóa được giữ trong bao lâu.
2) Ghi các dữ liệu khác nhau vào tệp từ mỗi quy trình và xem
bạn nhận được gì.

Bài đăng của andrea crotti
nhập fcntl
từ Quá trình nhập đa xử lý
FILENAME = 'file. txt'
return ('một số văn bản' * (100 * 100))
self. fileobj = fileobj
# có vấn đề gì ở đây không?
fcntl. lockf(tự. fileobj, fcntl. LOCK_EX)
tự quay lại. fileobj
fcntl. lockf(tự. fileobj, fcntl. LOCK_UN)

Tôi không nghĩ nó sẽ hoạt động nếu bạn cắt bớt tệp như thế này. Thao tác này
sẽ làm trống tệp *trước khi* kiểm tra khóa. Hãy thử mở
tệp để đọc và ghi (không cắt bớt).

Bài đăng của andrea crotti
to_lock. write(long_text())
Quy trình (đích=write_to_file). start()
Quy trình(đích=write_to_file). bắt đầu()

Oscar

Oscar Benjamin

2012-10-18 15. 31. 42 UTC

liên kết cố định

Bài đăng của andrea crotti

Bài đăng của Oscar Benjamin
Tại sao không nghĩ ra một bài kiểm tra thực sự cho bạn biết liệu nó có hiệu quả hay không? . sleep() để bạn biết khóa được giữ trong bao lâu.
1) Use time.sleep() so that you know how long the lock is held for.
2) Ghi các dữ liệu khác nhau vào tệp từ mỗi quy trình và xem
bạn nhận được kết quả gì.

Ok thanks I will try, but I thought that what I did was the worst
possible case, because I'm opening and writing on the same file from
two different processes, locking the file with LOCK_EX.
It should not open it at all as far as I understood...

Tôi không nghĩ bạn đã hiểu. Đọc liên kết mà Grant đã đăng.
http. // vi. wikipedia. org/wiki/File_locking#In_Unix-like_systems

Bài đăng của andrea crotti
Tôi không nghĩ nó sẽ hoạt động nếu bạn cắt bớt tệp như thế này. Thao tác này
sẽ làm trống tệp *trước khi* kiểm tra khóa. Hãy thử mở
tệp để đọc và ghi (không cắt bớt).

The lock is cooperative. It does not prevent the file from being
opened or overwritten. It only prevents any other process from
obtaining the lock. Here you open the file with mode 'w' which
truncates the file instantly (without checking for the lock).


Oscar

Không ai

2012-10-19 14. 36. 38 UTC

liên kết cố định

Bài đăng của andrea crotti
Uhh tôi hiểu rồi, cảm ơn, tôi đoán tôi sẽ sử dụng cái cũ. lock (ngay cả khi nó
cũng có thể gặp một số vấn đề).

Trong trường hợp đó, bạn không thấy. Một tập tin khóa cũng là tư vấn, tôi. e. nó chỉ
ảnh hưởng đến các ứng dụng kiểm tra tệp khóa một cách rõ ràng.

Trước đây, lợi thế của các tệp khóa là chúng hoạt động trên các triển khai NFS
không thực hiện khóa (đó là một hệ điều hành Unix lâu đời
joke that "NFS" stands for "Not a FileSystem", because it failed to
conform to established filesystem semantics).

Ngày nay, việc triển khai NFS không hỗ trợ khóa là đủ
rất hiếm để có thể bỏ qua chúng một cách an toàn. Vì vậy, các tệp khóa không mang lại bất kỳ
ưu điểm nào và có một nhược điểm khá rõ ràng (khả năng tệp khóa
"cũ" nếu chương trình kết thúc đột ngột mà không xóa .
the lock file).

Đối với bất kỳ hình thức khóa tư vấn nào, một điều quan trọng là tất cả
chương trình truy cập tệp đồng ý về cơ chế được sử dụng, tôi. e. có nên
sử dụng lockf(), fcntl(), floc() (các khóa được tạo bởi một cơ chế có thể hoặc
không được các cơ chế khác nhận ra) hoặc .
files, the naming convention which is used.

Nếu tệp dành riêng cho một chương trình cụ thể và bạn chỉ cần
bảo vệ chống lại nhiều phiên bản của chương trình đó, thì bạn có thể sử dụng bất kỳ tệp nào
mechanism you wish, and would be strongly advised to use kernel locks
(fcntl() is the most portable, followed by lockf(); flock() is a BSD-ism).

Lockfile cho Python là gì?

Mô tả dự án . Mục đích nếu không cụ thể là để khóa các tệp, mà chỉ đơn giản là cung cấp các khóa với việc triển khai dựa trên các nguyên hàm khóa tệp. Tất nhiên, những ổ khóa này có thể được sử dụng để dàn xếp quyền truy cập vào các tệp khác. provides a basic portable implementation of interprocess locks using lock files. The purpose if not specifically to lock files, but to simply provide locks with an implementation based on file-locking primitives. Of course, these locks could be used to mediate access to other files.

Tệp khóa trong Linux ở đâu?

Các tệp khóa phải được lưu trữ trong cấu trúc thư mục /var/lock . Tệp khóa cho thiết bị và các tài nguyên khác được chia sẻ bởi nhiều ứng dụng, chẳng hạn như tệp khóa thiết bị nối tiếp ban đầu được tìm thấy trong /usr/spool/locks hoặc /usr/spool/uucp , hiện phải được lưu trữ trong /var/lock.

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.

Là gì. khóa phần mở rộng tập tin?

tệp khóa được được Microsoft sử dụng. NET Framework để tạo các bản sao lockeed của tệp cơ sở dữ liệu . Trong trường hợp như vậy, một bản sao của tệp cơ sở dữ liệu sẽ mở bằng. phần mở rộng khóa. Điều này không cho phép người dùng thực hiện các thay đổi đối với tệp trong khi tệp đang được người dùng khác sử dụng.