You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import time
|
|
|
|
def measure_proc_stat() -> dict[str, int]:
|
|
proc_stat_header = open("/proc/stat", "r").readline()
|
|
proc_stat = proc_stat_header.split(' ')[2:]
|
|
proc_stat[-1] = proc_stat[-1].removesuffix('\n')
|
|
proc_stat = list(map(int, proc_stat))
|
|
|
|
proc_stat_dict= {'user': proc_stat[0],
|
|
'nice': proc_stat[1],
|
|
'system': proc_stat[2],
|
|
'idle': proc_stat[3],
|
|
'iowait': proc_stat[4],
|
|
'irq': proc_stat[5],
|
|
'softirq': proc_stat[6],
|
|
'steal': proc_stat[7],
|
|
'guest': proc_stat[8],
|
|
'guest_nice': proc_stat[9]}
|
|
|
|
return proc_stat_dict
|
|
|
|
if __name__ == "__main__":
|
|
"""
|
|
Script emulates htop calculation of CPU at the
|
|
moment of calling.
|
|
"""
|
|
prev = measure_proc_stat()
|
|
prev_idle = prev.get('idle') + prev.get('iowait')
|
|
prev_non_idle = prev.get('user') + prev.get('nice') + prev.get('system') + prev.get('irq') + prev.get('softirq') + prev.get('steal')
|
|
prev_total = prev_idle + prev_non_idle
|
|
|
|
time.sleep(0.1)
|
|
|
|
curr = measure_proc_stat()
|
|
curr_idle = curr.get('idle') + curr.get('iowait')
|
|
curr_non_idle = curr.get('user') + curr.get('nice') + curr.get('system') + curr.get('irq') + curr.get('softirq') + curr.get('steal')
|
|
curr_total = curr_idle + curr_non_idle
|
|
|
|
d_total = curr_total - prev_total
|
|
d_idle = curr_idle - prev_idle
|
|
|
|
cpu_usage = ((d_total - d_idle)/d_total)
|
|
print(cpu_usage)
|