簡體   English   中英

Python如何刷新Psutil結果?

[英]Python How Do I Refresh Psutil Result?

我正在嘗試使python腳本每分鍾按cpu /內存使用情況打印前5個進程。 但是,cpu結果在循環時似乎沒有改變。

循環時如何獲取cpu的新測量值?

我的代碼如下。

謝謝您的幫助!

import psutil
import time;
from functools import cmp_to_key

def log(line):
    print(line)
    with open("log.txt", "a") as f:
        f.write("{}\n".format(line))

def cmpCpu(a, b):
    a = a['cpu']
    b = b['cpu']
    if a > b:
        return -1
    elif a == b:
        return 0
    else:
        return 1

def cmpMemory(a, b):
    a = a['memory']
    b = b['memory']
    if a > b:
        return -1
    elif a == b:
        return 0
    else:
        return 1

def getInfo(pid):
    p = psutil.Process(pid)
    name = p.name()
    cpu = p.cpu_percent()
    memory = int(p.memory_info().rss/1024/1024)
    return {'name':name, 'cpu':cpu, 'memory':memory}

while True:
    localtime = time.localtime(time.time())
    timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
    log(timestamp)

    processes = []
    for i in psutil.pids():
        processes.append(getInfo(i))

    #Sort by cpu usage
    processes.sort(key=cmp_to_key(cmpCpu))
    for i in range(5):
        info = processes[i]
        info = info['name']+", "+str(info['cpu'])+"%"
        log(info)

    #Sort by memory usage
    processes.sort(key=cmp_to_key(cmpMemory))
    for i in range(5):
        info = processes[i]
        info = info['name']+", "+str(info['memory'])+"MB"
        log(info)

    time.sleep(60)

似乎psutil.process_iter就是答案。 下面的代碼有效。

import psutil
import time;
from functools import cmp_to_key

def log(line):
    print(line)
    with open("log.txt", "a") as f:
        f.write("{}\n".format(line))

def cmpCpu(a, b):
    a = a['cpu']
    b = b['cpu']
    if a > b:
        return -1
    elif a == b:
        return 0
    else:
        return 1

def cmpMemory(a, b):
    a = a['memory']
    b = b['memory']
    if a > b:
        return -1
    elif a == b:
        return 0
    else:
        return 1

while True:
    localtime = time.localtime(time.time())
    timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
    log(timestamp)

    #Collect information for each process
    processes = []
    for proc in psutil.process_iter(attrs=['name', 'cpu_percent', 'memory_info']):
        processes.append({'name': proc.info['name'], 'cpu': proc.info['cpu_percent'], 'memory': int(proc.info['memory_info'].rss/1024/1024)})

    #Sort by cpu usage
    log("CPU:")
    processes.sort(key=cmp_to_key(cmpCpu))
    for i in range(5):
        info = processes[i]
        info = info['name']+", "+str(info['cpu'])+"%"
        log(info)

    #Sort by memory usage
    log("Memory:")
    processes.sort(key=cmp_to_key(cmpMemory))
    for i in range(5):
        info = processes[i]
        info = info['name']+", "+str(info['memory'])+"MB"
        log(info)

    time.sleep(60)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM