2014-06-23 8 views
6

अंतराल मूल्यों के बावजूद कोड हमेशा 0.0 मान देता है।cpu_percent (अंतराल = कोई नहीं) अंतराल मूल्य पर ध्यान दिए बिना हमेशा 0 देता है PYTHON

import psutil 
p = psutil.Process() 
print p.cpu_percent(interval=1) 
print p.cpu_percent(interval=None) 
+0

Uhm मैं इसे पुन: पेश कर सकते हैं। यह 'psutil' के नए संस्करणों में एक बग हो सकता है। (मैंने लाइब्रेरी के अन्य संस्करणों का उपयोग किया है और यह हमेशा ठीक काम करता है)। ध्यान दें कि मैं वर्तमान प्रक्रिया में अलग-अलग थ्रेड शुरू करने वाले गैर-शून्य मान प्राप्त कर सकता हूं। – Bakuriu

+0

क्या आपने इसे 'psutil.cpu_percent (अंतराल = 1)' के साथ https://code.google.com/p/psutil/wiki/Documentation#CPU पर प्रलेखित करने की कोशिश की है? और मुझे लगता है कि प्रक्रिया वर्ग का उपयोग करते समय आपको एक पीआईडी ​​निर्दिष्ट करना होगा (जैसे 'p = psutil.Process (os.getpid())')। –

+0

@ क्रिस्टियनब्रेन्ड: मैंने एक ही लिंक से दस्तावेज पढ़ा और कई पीआईडी ​​(मान्य और चल रहा) निर्दिष्ट किया, लेकिन मुझे हमेशा 0.0 –

उत्तर

0

मेरे अपने कोड से कि काम करता है:

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

लेकिन मुझे प्रक्रिया ऑब्जेक्ट का CPU प्रतिशत ढूंढना होगा –

2

यह व्यवहार documented है:

जब अंतराल 0.0 या None पिछले कॉल के बाद गुजरे सिस्टम CPU बार ​​करने के लिए प्रक्रिया बार की तुलना करता है, तुरंत लौट रहा है। इसका मतलब है कि इसे पहली बार कहा जाता है, यह एक अर्थहीन 0.0 मान लौटाएगा जिसे आप अनदेखा करना चाहते हैं। इस मामले में सटीकता के लिए अनुशंसा की जाती है कि कॉल के बीच कम से कम 0.1 सेकेंड के साथ इस फ़ंक्शन को दूसरी बार कॉल किया जाए।

वहाँ भी एक कॉल के लिए interval=None उपयोग करने के खिलाफ एक चेतावनी है:

चेतावनी: पहली बार इस समारोह अंतराल = 0.0 या None साथ कहा जाता है कि यह एक व्यर्थ 0.0 वापस आ जाएगी मूल्य जिसे आप अनदेखा करना चाहते हैं।

यदि interval=None का उपयोग कर रहे हैं, तो पूर्व कॉल की तुलना में .cpu_percent पर कॉल करना सुनिश्चित करें।

p = psutil.Process(pid=pid) 
p.cpu_percent(interval=None) 
for i in range(100): 
    usage = p.cpu_percent(interval=None) 
    # do other things 
बजाय

:

for i in range(100): 
    p = psutil.Process(pid=pid) 
    p.cpu_percent(interval=None) 
    # do other things 
0

एक प्रक्रिया वस्तु की cpu परिवर्तनशील है। मैंने आपके लिए कुछ परीक्षण किए हैं।

for i in range(10): 
    p = psutil.Process(3301) 
    print p.cpu_percent(interval=0.1) 

परिणाम: 9.9 0.0 0.0 0.0 0.0 9.9 0.0 9.9 0.0 0.0

तो तुम एक प्रक्रिया वस्तु का सीपीयू प्रतिशत प्राप्त करना चाहते हैं, तो आप निश्चित समय में औसत समय लग सकता है।

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) 

परिणाम: 1.98

More info in picture

संबंधित मुद्दे