psutil

Форк
0
/
cpu_distribution.py 
107 строк · 3.9 Кб
1
#!/usr/bin/env python3
2

3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
4
# Use of this source code is governed by a BSD-style license that can be
5
# found in the LICENSE file.
6

7
"""Shows CPU workload split across different CPUs.
8

9
$ python3 scripts/cpu_workload.py
10
CPU 0     CPU 1     CPU 2     CPU 3     CPU 4     CPU 5     CPU 6     CPU 7
11
19.8      20.6      18.2      15.8      6.9       17.3      5.0       20.4
12
gvfsd     pytho     kwork     chrom     unity     kwork     kwork     kwork
13
chrom     chrom     indic     ibus-     whoop     nfsd      (sd-p     gvfsd
14
ibus-     cat       at-sp     chrom     Modem     nfsd4     light     upsta
15
ibus-     iprt-     ibus-     nacl_     cfg80     kwork     nfsd      bluet
16
chrom     irqba     gpg-a     chrom     ext4-     biose     nfsd      dio/n
17
chrom     acpid     bamfd     nvidi     kwork     scsi_     sshd      rpc.m
18
upsta     rsysl     dbus-     nfsd      biose     scsi_     ext4-     polki
19
rtkit     avahi     upowe     Netwo     scsi_     biose     UVM T     irq/9
20
light     rpcbi     snapd     cron      ipv6_     biose     kwork     dbus-
21
agett     kvm-i     avahi     kwork     biose     biose     scsi_     syste
22
nfsd      syste     rpc.i     biose     biose     kbloc     kthro     UVM g
23
nfsd      kwork     kwork     biose     vmsta     kwork     crypt     kaudi
24
nfsd      scsi_     charg     biose     md        ksoft     kwork     kwork
25
memca     biose     ksmd      ecryp     ksoft     watch     migra     nvme
26
therm     biose     kcomp     kswap     migra     cpuhp     watch     biose
27
syste     biose     kdevt     khuge     watch               cpuhp     biose
28
led_w     devfr     kwork     write     cpuhp                         biose
29
rpcio     oom_r     ksoft     kwork     syste                         biose
30
kwork     kwork     watch     migra                                   acpi_
31
biose     ksoft     cpuhp     watch                                   watch
32
biose     migra               cpuhp                                   kinte
33
biose     watch               rcu_s                                   netns
34
biose     cpuhp               kthre                                   kwork
35
cpuhp                                                                 ksoft
36
watch                                                                 migra
37
rcu_b                                                                 cpuhp
38
kwork
39
"""
40

41
from __future__ import print_function
42

43
import collections
44
import os
45
import sys
46
import time
47

48
import psutil
49
from psutil._compat import get_terminal_size
50

51

52
if not hasattr(psutil.Process, "cpu_num"):
53
    sys.exit("platform not supported")
54

55

56
def clean_screen():
57
    if psutil.POSIX:
58
        os.system('clear')
59
    else:
60
        os.system('cls')
61

62

63
def main():
64
    num_cpus = psutil.cpu_count()
65
    if num_cpus > 8:
66
        num_cpus = 8  # try to fit into screen
67
        cpus_hidden = True
68
    else:
69
        cpus_hidden = False
70

71
    while True:
72
        # header
73
        clean_screen()
74
        cpus_percent = psutil.cpu_percent(percpu=True)
75
        for i in range(num_cpus):
76
            print("CPU %-6i" % i, end="")
77
        if cpus_hidden:
78
            print(" (+ hidden)", end="")
79

80
        print()
81
        for _ in range(num_cpus):
82
            print("%-10s" % cpus_percent.pop(0), end="")
83
        print()
84

85
        # processes
86
        procs = collections.defaultdict(list)
87
        for p in psutil.process_iter(['name', 'cpu_num']):
88
            procs[p.info['cpu_num']].append(p.info['name'][:5])
89

90
        curr_line = 3
91
        while True:
92
            for num in range(num_cpus):
93
                try:
94
                    pname = procs[num].pop()
95
                except IndexError:
96
                    pname = ""
97
                print("%-10s" % pname[:10], end="")
98
            print()
99
            curr_line += 1
100
            if curr_line >= get_terminal_size()[1]:
101
                break
102

103
        time.sleep(1)
104

105

106
if __name__ == '__main__':
107
    main()
108

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.