菜鸟笔记
提升您的技术认知

python获取每颗cpu使用率

阅读 : 25

以下是关于python来获取服务器每颗CPU使用率的使用脚本。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re,time 

def _read_cpu_usage(): 
        """Read the current system cpu usage from /proc/stat""" 
        statfile = "/proc/stat" 
        cpulist = [] 
        try: 
                f = open(statfile, 'r') 
                lines = f.readlines() 
        except: 
                print "ERROR: Can not open %s,The system cannot continue to run" % (statfile) 
                return [] 
        for line in lines:
            tmplist = line.split()
            if len(tmplist) < 5:
                continue
            for b in tmplist:
                 m = re.search(r'cpu\d+',b)
                 if m is not None:
                    cpulist.append(tmplist)
        f.close()
        return cpulist

def get_cpu_usage(): 
        cpuusage = {} 
        cpustart = {} 
        cpuend = {} 
        linestart = _read_cpu_usage() 
        if not linestart: 
                return 0 
        for cpustr in linestart: 
                usni=long(cpustr[1])+long(cpustr[2])+long(cpustr[3])+long(cpustr[5])+long(cpustr[6])+long(cpustr[7])+long(cpustr[4]) 
                usn=long(cpustr[1])+long(cpustr[2])+long(cpustr[3]) 
                cpustart[cpustr[0]] = str(usni)+":"+str(usn) 
        sleep = 2 
        time.sleep(sleep) 
        lineend = _read_cpu_usage() 
        if not lineend: 
                return 0 
        for cpustr in lineend: 
                usni=long(cpustr[1])+long(cpustr[2])+long(cpustr[3])+long(cpustr[5])+long(cpustr[6])+long(cpustr[7])+long(cpustr[4]) 
                usn=long(cpustr[1])+long(cpustr[2])+long(cpustr[3]) 
                cpuend[cpustr[0]] = str(usni)+":"+str(usn) 
        for line in cpustart: 
                start = cpustart[line].split(':') 
                usni1,usn1 = float(start[0]),float(start[1]) 
                end = cpuend[line].split(':') 
                usni2,usn2 = float(end[0]),float(end[1]) 
                cpuper=(usn2-usn1)/(usni2-usni1) 
                cpuusage[line] = int(100*cpuper) 
         
        return cpuusage 

if __name__ == '__main__': 
        a = get_cpu_usage() 
        print a