Mã luôn trả về giá trị 0.0, bất kể giá trị khoảng thời gian.cpu_percent (interval = None) luôn trả về 0 bất kể giá trị khoảng thời gian PYTHON
import psutil
p = psutil.Process()
print p.cpu_percent(interval=1)
print p.cpu_percent(interval=None)
Mã luôn trả về giá trị 0.0, bất kể giá trị khoảng thời gian.cpu_percent (interval = None) luôn trả về 0 bất kể giá trị khoảng thời gian PYTHON
import psutil
p = psutil.Process()
print p.cpu_percent(interval=1)
print p.cpu_percent(interval=None)
Từ mã của riêng tôi mà làm việc:
cpu = psutil.cpu_times_percent(interval=0.4, percpu=False)
Nhưng tôi cần tìm phần trăm CPU của đối tượng Process –
Hành vi này là documented:
Khi khoảng cách là
0.0
hoặcNone
so sánh lần quá trình để lần hệ thống CPU trôi qua kể từ cuộc gọi cuối cùng, quay trở lại ngay lập tức. Điều đó có nghĩa là lần đầu tiên được gọi là nó sẽ trả về giá trị0.0
vô nghĩa mà bạn có nghĩa vụ phải bỏ qua. Trong trường hợp này được khuyến nghị cho độ chính xác mà chức năng này được gọi là lần thứ hai với ít nhất0.1
giây giữa các cuộc gọi.
Ngoài ra còn có một cảnh báo chống lại bằng interval=None
cho một cuộc gọi duy nhất:
Cảnh báo: lần đầu tiên chức năng này được gọi với khoảng =
0.0
hoặcNone
nó sẽ trả về một nghĩa0.0
giá trị mà bạn có nghĩa vụ phải bỏ qua.
Nếu sử dụng interval=None
, hãy đảm bảo gọi .cpu_percent
so với cuộc gọi trước.
p = psutil.Process(pid=pid)
p.cpu_percent(interval=None)
for i in range(100):
usage = p.cpu_percent(interval=None)
# do other things
thay vì:
for i in range(100):
p = psutil.Process(pid=pid)
p.cpu_percent(interval=None)
# do other things
Các cpu của một đối tượng Process là có thể thay đổi. Tôi đã làm một số xét nghiệm cho bạn.
for i in range(10):
p = psutil.Process(3301)
print p.cpu_percent(interval=0.1)
kết quả: 9.9 0.0 0.0 0.0 0.0 9.9 0.0 9.9 0.0 0.0
Vì vậy, nếu bạn muốn nhận được phần trăm CPU của một đối tượng Process, bạn có thể lấy trung bình trong thời gian nhất định.
test_list = []
for i in range(10):
p = psutil.Process(6601)
p_cpu = p.cpu_percent(interval=0.1)
test_list.append(p_cpu)
print float(sum(test_list))/len(test_list)
kết quả: 1.98
Uhm tôi có thể tái tạo nó. Nó có thể là một lỗi trong các phiên bản mới hơn của 'psutil'. (Tôi đã sử dụng các phiên bản khác của thư viện và nó luôn hoạt động tốt). Lưu ý rằng tôi có thể nhận được các giá trị khác không bắt đầu các luồng khác nhau trong quy trình hiện tại. – Bakuriu
Bạn đã thử nó với 'psutil.cpu_percent (interval = 1)' như được viết thành tài liệu tại https://code.google.com/p/psutil/wiki/Documentation#CPU? Và tôi nghĩ khi sử dụng lớp Process bạn phải chỉ định một PID (như 'p = psutil.Process (os.getpid())'). –
@ChristianBerendt: Tôi đọc tài liệu từ liên kết rất giống nhau và chỉ định một số PID (hợp lệ và chạy), nhưng tôi luôn có 0,0 –