resource --- Thông tin sử dụng tài nguyên


Mô-đun này cung cấp các cơ chế cơ bản để đo lường và kiểm soát tài nguyên hệ thống được chương trình sử dụng.

sẵn có: Unix, not WASI.

Các hằng số tượng trưng được sử dụng để chỉ định các tài nguyên hệ thống cụ thể và yêu cầu thông tin sử dụng về quy trình hiện tại hoặc các quy trình con của nó.

Một OSError được đưa ra do lỗi hệ thống.

exception resource.error

Bí danh OSError không được dùng nữa.

Thay đổi trong phiên bản 3.3: Sau PEP 3151, lớp này được đặt bí danh là OSError.

Giới hạn tài nguyên

Việc sử dụng tài nguyên có thể bị hạn chế bằng cách sử dụng chức năng setrlimit() được mô tả bên dưới. Mỗi tài nguyên được kiểm soát bởi một cặp giới hạn: giới hạn mềm và giới hạn cứng. Giới hạn mềm là giới hạn hiện tại và có thể được hạ xuống hoặc nâng lên bởi một quá trình theo thời gian. Giới hạn mềm không bao giờ có thể vượt quá giới hạn cứng. Giới hạn cứng có thể được hạ xuống bất kỳ giá trị nào lớn hơn giới hạn mềm, nhưng không được nâng lên. (Chỉ các quy trình có UID hiệu quả của siêu người dùng mới có thể tăng giới hạn cứng.)

Các tài nguyên cụ thể có thể bị hạn chế phụ thuộc vào hệ thống. Chúng được mô tả trong trang man getrlimit(2). Các tài nguyên được liệt kê bên dưới được hỗ trợ khi hệ điều hành cơ bản hỗ trợ chúng; các tài nguyên không thể được kiểm tra hoặc kiểm soát bởi hệ điều hành sẽ không được xác định trong mô-đun này cho các nền tảng đó.

resource.RLIM_INFINITY

Hằng số được sử dụng để biểu thị giới hạn cho một nguồn tài nguyên không giới hạn.

resource.getrlimit(resource)

Trả về một bộ (soft, hard) với giới hạn cứng và mềm hiện tại là resource. Tăng ValueError nếu tài nguyên không hợp lệ được chỉ định hoặc error nếu lệnh gọi hệ thống cơ bản không thành công.

resource.setrlimit(resource, limits)

Đặt giới hạn tiêu thụ mới của resource. Đối số limits phải là một bộ (soft, hard) gồm hai số nguyên mô tả các giới hạn mới. Giá trị RLIM_INFINITY có thể được sử dụng để yêu cầu giới hạn không giới hạn.

Tăng ValueError nếu tài nguyên không hợp lệ được chỉ định, nếu giới hạn mềm mới vượt quá giới hạn cứng hoặc nếu một quá trình cố gắng tăng giới hạn cứng của nó. Chỉ định giới hạn RLIM_INFINITY khi giới hạn phần cứng hoặc giới hạn hệ thống cho tài nguyên đó không giới hạn sẽ dẫn đến ValueError. Một quy trình có UID hiệu quả của siêu người dùng có thể yêu cầu bất kỳ giá trị giới hạn hợp lệ nào, kể cả không giới hạn, nhưng ValueError vẫn sẽ được tăng lên nếu giới hạn được yêu cầu vượt quá giới hạn áp đặt của hệ thống.

setrlimit cũng có thể tăng error nếu lệnh gọi hệ thống cơ bản không thành công.

VxWorks chỉ hỗ trợ cài đặt RLIMIT_NOFILE.

Tăng một auditing event resource.setrlimit với các đối số resource, limits.

resource.prlimit(pid, resource[, limits])

Kết hợp setrlimit()getrlimit() trong một chức năng và hỗ trợ nhận và đặt giới hạn tài nguyên của một quy trình tùy ý. Nếu pid bằng 0 thì lệnh gọi sẽ áp dụng cho quy trình hiện tại. resourcelimits có cùng ý nghĩa như trong setrlimit(), ngoại trừ limits là tùy chọn.

Khi không cung cấp limits, hàm sẽ trả về giới hạn resource của quá trình pid. Khi limits được cấp, giới hạn resource của quy trình được đặt và giới hạn tài nguyên cũ được trả về.

Tăng ProcessLookupError khi không thể tìm thấy pidPermissionError khi người dùng không có CAP_SYS_RESOURCE cho quy trình.

Tăng một auditing event resource.prlimit với các đối số pid, resource, limits.

sẵn có: Linux >= 2.6.36 with glibc >= 2.13.

Added in version 3.4.

Các ký hiệu này xác định các tài nguyên mà mức tiêu thụ của chúng có thể được kiểm soát bằng cách sử dụng các hàm setrlimit()getrlimit() được mô tả bên dưới. Giá trị của các ký hiệu này chính xác là các hằng số được sử dụng bởi các chương trình C.

Trang man Unix cho getrlimit(2) liệt kê các tài nguyên có sẵn. Lưu ý rằng không phải tất cả các hệ thống đều sử dụng cùng một ký hiệu hoặc cùng một giá trị để biểu thị cùng một tài nguyên. Mô-đun này không cố gắng che giấu sự khác biệt của nền tảng --- các biểu tượng không được xác định cho một nền tảng sẽ không có sẵn trong mô-đun này trên nền tảng đó.

resource.RLIMIT_CORE

Kích thước tối đa (tính bằng byte) của tệp lõi mà quy trình hiện tại có thể tạo. Điều này có thể dẫn đến việc tạo một tệp lõi nếu cần lõi lớn hơn để chứa toàn bộ hình ảnh quá trình.

resource.RLIMIT_CPU

Lượng thời gian xử lý tối đa (tính bằng giây) mà một quy trình có thể sử dụng. Nếu vượt quá giới hạn này, tín hiệu SIGXCPU sẽ được gửi đến quy trình. (Xem tài liệu mô-đun signal để biết thông tin về cách bắt tín hiệu này và thực hiện điều gì đó hữu ích, ví dụ: xóa các tệp đang mở vào đĩa.)

resource.RLIMIT_FSIZE

Kích thước tối đa của tệp mà quá trình có thể tạo.

resource.RLIMIT_DATA

Kích thước tối đa (tính bằng byte) của vùng heap của tiến trình.

resource.RLIMIT_STACK

Kích thước tối đa (tính bằng byte) của ngăn xếp cuộc gọi cho quy trình hiện tại. Điều này chỉ ảnh hưởng đến ngăn xếp của luồng chính trong quy trình đa luồng.

resource.RLIMIT_RSS

Kích thước tập hợp thường trú tối đa cần được cung cấp cho quy trình.

resource.RLIMIT_NPROC

Số lượng quy trình tối đa mà quy trình hiện tại có thể tạo.

resource.RLIMIT_NOFILE

Số lượng mô tả tệp mở tối đa cho quy trình hiện tại.

resource.RLIMIT_OFILE

Tên BSD cho RLIMIT_NOFILE.

resource.RLIMIT_MEMLOCK

Không gian địa chỉ tối đa có thể bị khóa trong bộ nhớ.

resource.RLIMIT_VMEM

Vùng bộ nhớ được ánh xạ lớn nhất mà tiến trình có thể chiếm giữ. Thường là bí danh RLIMIT_AS.

sẵn có: Solaris, FreeBSD, NetBSD.

resource.RLIMIT_AS

Diện tích tối đa (tính bằng byte) của không gian địa chỉ mà quy trình có thể chiếm giữ.

resource.RLIMIT_MSGQUEUE

Số byte có thể được phân bổ cho hàng đợi tin nhắn POSIX.

sẵn có: Linux >= 2.6.8.

Added in version 3.4.

resource.RLIMIT_NICE

Mức trần cho mức đẹp của quy trình (được tính bằng 20 - rlim_cur).

sẵn có: Linux >= 2.6.12.

Added in version 3.4.

resource.RLIMIT_RTPRIO

Mức trần ưu tiên thời gian thực.

sẵn có: Linux >= 2.6.12.

Added in version 3.4.

resource.RLIMIT_RTTIME

Giới hạn thời gian (tính bằng micro giây) trên thời gian CPU mà một quy trình có thể sử dụng theo lịch trình thời gian thực mà không tạo ra một cuộc gọi tổng thể chặn.

sẵn có: Linux >= 2.6.25.

Added in version 3.4.

resource.RLIMIT_SIGPENDING

Số lượng tín hiệu mà quá trình có thể xếp hàng.

sẵn có: Linux >= 2.6.8.

Added in version 3.4.

resource.RLIMIT_SBSIZE

Kích thước tối đa (tính bằng byte) của mức sử dụng bộ đệm ổ cắm cho người dùng này. Điều này giới hạn dung lượng bộ nhớ mạng và do đó giới hạn số lượng mbuf mà người dùng này có thể nắm giữ bất kỳ lúc nào.

sẵn có: FreeBSD, NetBSD.

Added in version 3.4.

resource.RLIMIT_SWAP

Kích thước tối đa (tính bằng byte) của không gian hoán đổi có thể được dành riêng hoặc sử dụng bởi tất cả các quy trình của id người dùng này. Giới hạn này chỉ được thực thi nếu bit 1 của vm.overcommit sysctl được đặt. Vui lòng xem tuning(7) để biết mô tả đầy đủ về hệ thống này.

sẵn có: FreeBSD >= 8.

Added in version 3.4.

resource.RLIMIT_NPTS

Số lượng thiết bị đầu cuối giả tối đa được tạo bởi id người dùng này.

sẵn có: FreeBSD >= 8.

Added in version 3.4.

resource.RLIMIT_KQUEUES

Số lượng kqueue tối đa mà id người dùng này được phép tạo.

sẵn có: FreeBSD >= 11.

Added in version 3.10.

Sử dụng tài nguyên

Các chức năng này được sử dụng để truy xuất thông tin sử dụng tài nguyên:

resource.getrusage(who)

Hàm này trả về một đối tượng mô tả các tài nguyên được tiêu thụ bởi tiến trình hiện tại hoặc các tiến trình con của nó, như được chỉ định bởi tham số who. Tham số who phải được chỉ định bằng một trong các hằng số RUSAGE_* được mô tả bên dưới.

Một ví dụ đơn giản:

từ nhập tài nguyên *
thời gian nhập khẩu

nhiệm vụ # a không bị ràng buộc bởi CPU
thời gian.ngủ(3)
in(getrusage(RUSAGE_SELF))

nhiệm vụ ràng buộc # a CPU
cho tôi trong phạm vi (10 ** 8):
   _ = 1 + 1
in(getrusage(RUSAGE_SELF))

Mỗi trường có giá trị trả về mô tả cách sử dụng một tài nguyên hệ thống cụ thể, ví dụ: lượng thời gian chạy ở chế độ người dùng hoặc số lần tiến trình được hoán đổi khỏi bộ nhớ chính. Một số giá trị phụ thuộc vào khoảng thời gian đánh dấu đồng hồ, ví dụ: lượng bộ nhớ mà tiến trình đang sử dụng.

Để tương thích ngược, giá trị trả về cũng có thể truy cập được dưới dạng bộ gồm 16 phần tử.

Các trường ru_utimeru_stime của giá trị trả về lần lượt là các giá trị dấu phẩy động biểu thị lượng thời gian dành cho việc thực thi ở chế độ người dùng và lượng thời gian dành cho việc thực thi ở chế độ hệ thống. Các giá trị còn lại là số nguyên. Tham khảo trang man getrusage(2) để biết thông tin chi tiết về các giá trị này. Một bản tóm tắt ngắn gọn được trình bày ở đây:

chỉ mục

trường

Tài nguyên

0

ru_utime

thời gian ở chế độ người dùng (giây nổi)

1

ru_stime

thời gian ở chế độ hệ thống (giây nổi)

2

ru_maxrss

kích thước tập hợp cư dân tối đa

3

ru_ixrss

kích thước bộ nhớ chia sẻ

4

ru_idrss

kích thước bộ nhớ không chia sẻ

5

ru_isrss

kích thước ngăn xếp không được chia sẻ

6

ru_minflt

lỗi trang không yêu cầu I/O

7

ru_majflt

lỗi trang yêu cầu I/O

8

ru_nswap

số lần trao đổi

9

ru_inblock

chặn hoạt động đầu vào

10

ru_oublock

khối hoạt động đầu ra

11

ru_msgsnd

tin nhắn đã gửi

12

ru_msgrcv

tin nhắn đã nhận

13

ru_nsignals

tín hiệu nhận được

14

ru_nvcsw

chuyển đổi bối cảnh tự nguyện

15

ru_nivcsw

chuyển đổi bối cảnh không tự nguyện

Hàm này sẽ tăng ValueError nếu tham số who không hợp lệ được chỉ định. Nó cũng có thể đưa ra ngoại lệ error trong những trường hợp bất thường.

resource.getpagesize()

Trả về số byte trong một trang hệ thống. (Điều này không cần phải giống với kích thước trang phần cứng.)

Các ký hiệu RUSAGE_* sau đây được chuyển đến hàm getrusage() để chỉ định thông tin quy trình nào sẽ được cung cấp.

resource.RUSAGE_SELF

Chuyển tới getrusage() để yêu cầu tài nguyên được tiêu thụ bởi quá trình gọi, đây là tổng tài nguyên được sử dụng bởi tất cả các luồng trong quy trình.

resource.RUSAGE_CHILDREN

Chuyển tới getrusage() để yêu cầu tài nguyên được sử dụng bởi các tiến trình con của tiến trình gọi vốn đã bị chấm dứt và đang chờ.

resource.RUSAGE_BOTH

Chuyển tới getrusage() để yêu cầu tài nguyên được tiêu thụ bởi cả quy trình hiện tại và quy trình con. Có thể không có sẵn trên tất cả các hệ thống.

resource.RUSAGE_THREAD

Chuyển tới getrusage() để yêu cầu tài nguyên được sử dụng bởi luồng hiện tại. Có thể không có sẵn trên tất cả các hệ thống.

Added in version 3.2.