亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 python 獲取內存使用情況

通過 python 獲取內存使用情況

aluckdog 2022-09-06 15:44:56
我在使用 檢索系統的內存使用情況時遇到問題。psutil當我運行我的代碼時,它會正確檢索CPU使用率,但是當它嘗試獲取內存時,它會引發AccessDenied錯誤。法典:if(pi['name']=='java.exe'):     pro=psutil.Process(0)     cpu=pro.cpu_percent(1)     memory=pro.memory_full_info().uss/(1024*1024)         return memory,cpu錯誤信息:psutil.AccessDenied (pid=0)如何獲取內存使用量?
查看完整描述

1 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

psutil.Process()采用一個參數 - 進程標識符 (PID)。如果調用它時沒有參數或帶有 ,則使用當前進程的 pid。None


在 Window 上,pid 0 是系統空閑進程,它需要特權。SYSTEM


pro=psutil.Process(0) # here's your problem

如果要獲取 的內存/CPU 使用率,則必須獲取 pid,然后使用 。在下面的示例中,我使用了:java.exepsutilfirefox.exe


import psutil

from ctypes import *

from ctypes.wintypes import *


class PROCESSENTRY32W(Structure):

    _fields_ = [("dwSize", DWORD),

                ("cntUsage", DWORD),

                ("th32ProcessID", DWORD),

                ("th32DefaultHeapID", POINTER(ULONG)),

                ("th32ModuleID", DWORD),

                ("cntThreads", DWORD),

                ("th32ParentProcessID", DWORD),

                ("pcPriClassBase", LONG),

                ("dwFlags", DWORD),

                ("szExeFile", c_wchar * MAX_PATH)]


def get_processes():

    TH32CS_SNAPPROCESS = 0x00000002

    INVALID_HANDLE_VALUE = -1


    CreateToolhelp32Snapshot = windll.kernel32.CreateToolhelp32Snapshot

    CreateToolhelp32Snapshot.argtypes = [DWORD, DWORD]

    CreateToolhelp32Snapshot.restype = HANDLE


    Process32FirstW = windll.kernel32.Process32FirstW

    Process32FirstW.argtypes = [HANDLE, POINTER(PROCESSENTRY32W)]

    Process32FirstW.restype = BOOL


    Process32NextW = windll.kernel32.Process32NextW

    Process32NextW.argtypes = [HANDLE, POINTER(PROCESSENTRY32W)]

    Process32NextW.restype = BOOL


    CloseHandle = windll.kernel32.CloseHandle

    CloseHandle.argtypes = [HANDLE]

    CloseHandle.restype = BOOL


    snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

    if snapshot == INVALID_HANDLE_VALUE:

        return []


    try:

        process_entry = PROCESSENTRY32W()

        process_entry.dwSize = sizeof(PROCESSENTRY32W)

        if not Process32FirstW(snapshot, byref(process_entry)):

            return []


        processes = []

        while Process32NextW(snapshot, byref(process_entry)):

            processes.append((process_entry.th32ProcessID, process_entry.szExeFile))

    finally:

        CloseHandle(snapshot)

        #print("Closed handle")


    return processes


for pid, name in get_processes():

    if name == "firefox.exe":

        pro = psutil.Process(pid)

        cpu = pro.cpu_percent(1.0)

        memory = pro.memory_full_info().uss/(1024*1024)

        print(memory, cpu)

輸出:


471.2890625 1.6

127.15234375 25.0

18.50390625 0.0

668.09375 0.0

706.6875 0.0

512.671875 0.0

648.953125 4.7

1037.0859375 4.7

1160.1015625 98.4

337.46484375 0.0

1418.72265625 1.6

0.90625 0.0

0.90625 0.0


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號