Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Thông tin sử dụng tài nguyên (Resource Usage) bằng Python

Đo lường việc sử dụng tài nguyên UNIX, chúng ta cần dùng module resource trong chương trình. Module này cũng có thể kiểm soát việc sử dụng tài nguyên.

Để dùng module này, nên nhập bằng:

import resource

Giới hạn tài nguyên (Resource Limits)

Trong module này, ta có thể dùng setrlimit() để giới hạn sử dụng tài nguyên. Có hai tham số để giới hạn: soft limit (giới hạn mềm) và hard limit (giới hạn cứng). Soft limit là giới hạn hiện tại, có thể thay đổi trong quá trình chạy, nhưng không thể vượt quá hard limit. Hard limit có thể giảm xuống bất kỳ giá trị nào trên soft limit, nhưng không thể tăng lên.

Một số phương thức và hằng số liên quan đến giới hạn tài nguyên:

Phương thức resource.getrlimit(resource)

Trả về soft limit và hard limit dưới dạng tuple. Nếu tài nguyên chỉ định không hợp lệ, ném ValueError.

Phương thức resource.setrlimit(resource, limits)

Thiết lập giới hạn cho tài nguyên. Limits có thể gán dưới dạng tuple (soft, hard). Có thể dùng RLIM_INFINITY để làm tài nguyên không giới hạn.

Phương thức resource.prlimit(pid, resource[, limits])

Kết hợp của setrlimit() và getrlimit(). Có thể lấy và đặt giới hạn tài nguyên cùng lúc cho một tiến trình tùy ý. Khi pid = 0, hoạt động trên tiến trình hiện tại.

Một số hằng số liên quan đến Resource Limits:

STTHằng số & Mô tả
1RLIM_INFINITY – Giới hạn cho tài nguyên không giới hạn
2RLIMIT_CORE – Kích thước tối đa file core do tiến trình hiện tại tạo
3RLIMIT_CPU – Thời gian xử lý tối đa của bộ vi xử lý. Vượt giới hạn sẽ gửi tín hiệu SIGXCPU
4RLIMIT_DATA – Kích thước tối đa heap của bộ vi xử lý
5RLIMIT_STACK – Kích thước tối đa call stack. Dùng stack của main thread cho tiến trình đa luồng
6RLIMIT_NOFILE – Số lượng file descriptor mở tối đa cho tiến trình hiện tại
7RLIMIT_MEMLOCK – Không gian địa chỉ tối đa cho bộ nhớ khóa (locked memory)
8RLIMIT_NICE – Trần mức nice của tiến trình
9RLIMIT_SWAP – Kích thước tối đa swap space
10RLIMIT_NTPS – Số lượng pseudo terminals tối đa trong hệ thống

Sử dụng tài nguyên (Resource Usage)

Có các phương thức và hằng số liên quan đến sử dụng tài nguyên.

Phương thức resource.getrusage(who)

Trả về đối tượng được dùng bởi tiến trình hiện tại hoặc tiến trình con. Trả về nhiều trường. Từ các trường giá trị trả về, ta có thông tin về cách tài nguyên đã được sử dụng.

Phương thức resource.getpagesize()

Trả về số byte trong một trang hệ thống (system page). Có thể không giống kích thước trang vật lý.

Một số hằng số liên quan đến Resource Usage:

STTHằng số & Mô tả
1RUSAGE_SELF – Yêu cầu tài nguyên tiêu thụ bởi tiến trình gọi. Tổng tài nguyên của các thread
2RUSAGE_CHILDREN – Yêu cầu tài nguyên tiêu thụ bởi tiến trình con
3RUSAGE_BOTH – Yêu cầu tài nguyên bởi tiến trình gọi và tiến trình con. Không khả dụng trên mọi hệ thống
4RUSAGE_THREAD – Sử dụng tài nguyên bởi luồng hiện tại. Không khả dụng trên mọi hệ thống

Mã ví dụ

import resource

res_limits = resource.getrusage(resource.RUSAGE_SELF)
print(res_limits)
print('Kích thước trang: ' + str(resource.getpagesize()))
resource.setrlimit(resource.RLIMIT_CPU, (1, 2))
print('Giới hạn tài nguyên: ' + str(resource.getrlimit(resource.RLIMIT_CPU)))

for a in range(1000):
    for b in range(1000):
        for c in range(1000):
            pass

Kết quả

$ python3 example.py
resource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=1147, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17)
Kích thước trang: 4096
Giới hạn tài nguyên: (1, 2)
CPU time limit exceeded (core dumped)