2014-06-23 21 views
6

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) 
+0

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

+0

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())'). –

+0

@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 –

Trả lời

0

Từ mã của riêng tôi mà làm việc:

cpu = psutil.cpu_times_percent(interval=0.4, percpu=False) 
+0

Nhưng tôi cần tìm phần trăm CPU của đối tượng Process –

2

Hành vi này là documented:

Khi khoảng cách là 0.0 hoặc None 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ất 0.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ặc None nó sẽ trả về một nghĩa 0.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 
0

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

More info in picture

Các vấn đề liên quan