用Python计算进程cpu使用率

2024-09-29 21:31:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图(通过一个pid)获取进程cpu的使用情况。我对它做了一些研究,发现我可以使用GetSystemTimes()函数来计算它。 我在这个链接中找到了计算:http://www.codeproject.com/Articles/10258/How-to-get-CPU-usage-of-processes-and-threads

我需要用Python编写这些代码,但我不知道怎么做。 所以我找到了这个代码:https://sites.google.com/site/cadspython/home/modules/calcprocesscpuusage-py

我试着运行它,一切都很好,但是当我运行一个小Python程序(占用了28%的cpu利用率),代码显示了100%和98%。这不好。在

因此,我需要一个代码,它通过使用Python(使用pywin32)中的GetSystemTimes()函数来计算进程cpu使用率。在

提前谢谢。在


Tags: to函数代码comhttp进程链接www
1条回答
网友
1楼 · 发布于 2024-09-29 21:31:24

经过进一步的研究,我找到了解决办法。在

因此,为了获得进程cpu使用率的百分比,我们需要一些参数:

1。系统时间

为了计算这个,我们需要用户模式时间,内核模式时间和 空闲模式时间:

    from ctypes import *
    import time

    class FILETIME(Structure):
       _fields_ = [
          ("dwLowDateTime", DWORD),
          ("dwHighDateTime", DWORD)]

    def GetSystemTimes():
        """
        Uses the function GetSystemTimes() (win32) in order to get the user    mode time, kernel mode time and idle mode time
        :return: user time, kernel time and idle time (Dictinary)
        """

        __GetSystemTimes = windll.kernel32.GetSystemTimes
        idleTime, kernelTime, userTime = FILETIME(), FILETIME(), FILETIME()

        success = __GetSystemTimes(

        byref(idleTime),
        byref(kernelTime),
        byref(userTime))

        assert success, ctypes.WinError(ctypes.GetLastError())[1]

        return {
            "idleTime": idleTime.dwLowDateTime,
            "kernelTime": kernelTime.dwLowDateTime,
            "userTime": userTime.dwLowDateTime
           }


    def get_sys():  

        FirstSystemTimes = GetSystemTimes()
        time.sleep(SLEEP_TIME_1_5)
        SecSystemTimes = GetSystemTimes()

        """
         The total amount of time the system has operated since the last measurement is calculated by getting 
         kernel + user
        """

       usr = SecSystemTimes['userTime'] - FirstSystemTimes['userTime']
       ker = SecSystemTimes['kernelTime'] - FirstSystemTimes['kernelTime']
       idl = SecSystemTimes['idleTime'] - FirstSystemTimes['idleTime']

       sys = usr + ker
       return sys

2。进程用户模式时间和进程内核时间

要首先获得这些参数,我们需要创建一个新的进程句柄,然后我们将能够获得进程用户模式时间和进程内核时间:

^{pr2}$

相关问题 更多 >

    热门问题