파이썬에서 현재 CPU 및 RAM 사용량을 얻는 방법?


335

파이썬에서 현재 시스템 상태 (현재 CPU, RAM, 여유 디스크 공간 등)를 얻는 가장 좋은 방법은 무엇입니까? * nix 및 Windows 플랫폼의 보너스 포인트.

내 검색에서 추출하는 몇 가지 가능한 방법이 있습니다.

  1. PSI 와 같은 라이브러리 (현재 활발하게 개발되지 않았고 여러 플랫폼에서 지원되지 않는 것으로 보임) 또는 pystatgrab (2007 년 이후 활동이 없으며 Windows를 지원하지 않는 것)과 같은 라이브러리를 사용 합니다.

  2. 이러한 사용으로 플랫폼 특정 코드를 사용 os.popen("ps")* 괜찬아 시스템 및 또는 유사한 MEMORYSTATUS에서 ctypes.windll.kernel32(볼 은 ActiveState에이 제조법 Windows 플랫폼을위한 참조). 파이썬 클래스를 모든 코드 스 니펫과 함께 넣을 수 있습니다.

이러한 방법이 나쁘지는 않지만 동일한 작업을 수행하는 잘 지원되는 다중 플랫폼 방법이 있습니까?


동적 가져 오기를 사용하여 고유 한 다중 플랫폼 라이브러리를 빌드 할 수 있습니다. "if sys.platform == 'win32': win_sysstatus를 sysstatus로 가져 오기; 그렇지 않으면"...
John Fouhy

1
App Engine에서도 작동하는 것이 있으면 좋을 것입니다.
Attila O.

패키지의 나이가 중요합니까? 누군가가 처음으로 제대로 구했다면 왜 여전히 옳지 않습니까?
Paul Smith

답변:


409

psutil 라이브러리 는 다양한 플랫폼에서 CPU, RAM 등에 대한 정보를 제공합니다.

psutil은 ps, top 및 Windows 작업 관리자와 같은 도구가 제공하는 많은 기능을 구현하여 Python을 사용하여 휴대용 방식으로 프로세스 및 시스템 활용 (CPU, 메모리) 실행 정보를 검색하기위한 인터페이스를 제공하는 모듈입니다.

현재 2.6 ~ 3.5의 Python 버전 (Python 2.4 및 2.5의 사용자는 2.1.3 버전을 사용할 수 있음)과 함께 Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD 및 NetBSD (32 비트 및 64 비트 아키텍처)를 지원합니다.


몇 가지 예 :

#!/usr/bin/env python
import psutil
# gives a single float value
psutil.cpu_percent()
# gives an object with many fields
psutil.virtual_memory()
# you can convert that object to a dictionary 
dict(psutil.virtual_memory()._asdict())
# you can have the percentage of used RAM
psutil.virtual_memory().percent
79.2
# you can calculate percentage of available memory
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
20.8

더 많은 개념과 관심 개념을 제공하는 다른 문서는 다음과 같습니다.


33
OSX에서 나를 위해 일했습니다 : $ pip install psutil; >>> import psutil; psutil.cpu_percent()그리고 >>> psutil.virtual_memory()멋진 vmem 객체를 반환한다 :vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
호브

12
psutil 라이브러리없이 어떻게 할 수 있습니까?
BigBrownBear00

2
@ user1054424 파이썬에는 resource 라는 내장 라이브러리가 있습니다 . 그러나, 당신이 할 수있는 가장 큰 것은 하나의 파이썬 프로세스가 사용하고 있거나 자식 프로세스 인 메모리를 얻는 것입니다. 또한 매우 정확하지 않은 것 같습니다. 빠른 테스트 에서 내 Mac의 유틸리티 도구에서 약 2MB의 리소스 가 부족한 것으로 나타났습니다 .
오스틴 A

12
@ BigBrownBear00 그냥 psutil의 소스를 확인;)
Mehulkumar

1
@ Jon Cage 안녕 Jon, 사용 가능한 메모리와 사용 가능한 메모리의 차이를 확인해도 될까요? psutil.virtual_memory ()를 사용하여 분석을 위해 메모리에로드 할 수있는 데이터 양을 결정하려고합니다. 당신의 도움을 주셔서 감사합니다!
AiRiFiEd

66

psutil 라이브러리를 사용하십시오 . Ubuntu 18.04에서 pip는 2019 년 1 월 30 일부터 5.5.0 (최신 버전)을 설치했습니다. 이전 버전은 약간 다르게 동작 할 수 있습니다. Python에서 다음을 수행하여 psutil 버전을 확인할 수 있습니다.

from __future__ import print_function  # for Python2
import psutil
print(psutil.__versi‌​on__)

메모리 및 CPU 통계를 얻으려면 :

from __future__ import print_function
import psutil
print(psutil.cpu_percent())
print(psutil.virtual_memory())  # physical memory usage
print('memory % used:', psutil.virtual_memory()[2])

virtual_memory(튜플) 비율 메모리가 시스템 전체를 사용해야합니다. 이것은 우분투 18.04에서 몇 퍼센트 정도 과대 평가 된 것으로 보입니다.

현재 Python 인스턴스에서 사용하는 메모리를 얻을 수도 있습니다.

import os
import psutil
pid = os.getpid()
py = psutil.Process(pid)
memoryUse = py.memory_info()[0]/2.**30  # memory use in GB...I think
print('memory use:', memoryUse)

파이썬 스크립트의 현재 메모리 사용을 제공합니다.

psutil 에 대한 pypi 페이지 에는 좀 더 자세한 예제가 있습니다.


32

Linux 만 해당 : stdlib 종속성 만있는 RAM 사용을위한 1 개의 라이너 :

import os
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])

편집 : 지정된 솔루션 OS 종속성


1
굉장히 유용하다! 사람이 읽을 수있는 단위로 직접 얻으려면 os.popen('free -th').readlines()[-1].split()[1:]. 이 줄은 문자열 목록을 반환합니다.
iipr

python:3.8-slim-buster없습니다free
마틴 토마스

21

외부 라이브러리가없는 아래 코드는 나를 위해 일했습니다. 파이썬 2.7.9에서 테스트했습니다.

CPU 사용량

import os

    CPU_Pct=str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))

    #print results
    print("CPU Usage = " + CPU_Pct)

그리고 Ram 사용량, 총계, 사용 및 무료

import os
mem=str(os.popen('free -t -m').readlines())
"""
Get a whole line of memory output, it will be something like below
['             total       used       free     shared    buffers     cached\n', 
'Mem:           925        591        334         14         30        355\n', 
'-/+ buffers/cache:        205        719\n', 
'Swap:           99          0         99\n', 
'Total:        1025        591        434\n']
 So, we need total memory, usage and free memory.
 We should find the index of capital T which is unique at this string
"""
T_ind=mem.index('T')
"""
Than, we can recreate the string with this information. After T we have,
"Total:        " which has 14 characters, so we can start from index of T +14
and last 4 characters are also not necessary.
We can create a new sub-string using this information
"""
mem_G=mem[T_ind+14:-4]
"""
The result will be like
1025        603        422
we need to find first index of the first space, and we can start our substring
from from 0 to this index number, this will give us the string of total memory
"""
S1_ind=mem_G.index(' ')
mem_T=mem_G[0:S1_ind]
"""
Similarly we will create a new sub-string, which will start at the second value. 
The resulting string will be like
603        422
Again, we should find the index of first space and than the 
take the Used Memory and Free memory.
"""
mem_G1=mem_G[S1_ind+8:]
S2_ind=mem_G1.index(' ')
mem_U=mem_G1[0:S2_ind]

mem_F=mem_G1[S2_ind+8:]
print 'Summary = ' + mem_G
print 'Total Memory = ' + mem_T +' MB'
print 'Used Memory = ' + mem_U +' MB'
print 'Free Memory = ' + mem_F +' MB'

1
당신은 생각하지 마십시오 grepawk더 나은 파이썬에서 문자열 처리에 의해 처리 될 것인가?
Reinderien

개인적으로 awk에 익숙하지 않고 아래의 CPU 사용량 스 니펫을 awkless 버전으로 만들었습니다. 매우 편리합니다, 감사합니다!
Jay

3
이 코드가 외부 라이브러리를 사용하지 않는다고 말하는 것은 혼란 스럽습니다. 실제로 이들은 grep, awk 및 free의 가용성에 크게 의존하지 않습니다. 이것은 위의 코드를 이식 불가능하게 만듭니다. OP는 "* nix 및 Windows 플랫폼에 대한 보너스 포인트"라고 명시했습니다.
캡틴 렙턴

10

여기 제가 얼마 전에 정리 한 것이 있습니다. 창문 일 뿐이지 만 필요한 일에 참여하는 데 도움이 될 수 있습니다.

"sys available mem"에서 파생 됨 : http://msdn2.microsoft.com/en-us/library/aa455130.aspx

"개별 프로세스 정보 및 Python 스크립트 예" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true

참고 : WMI 인터페이스 / 프로세스도 비슷한 작업을 수행 할 수 있습니다. 현재 방법이 내 요구를 충족시키기 때문에 여기에서 사용하지 않지만 언젠가 이것을 확장하거나 개선 해야하는 경우 WMI 도구를 조사 할 수 있습니다 .

파이썬 WMI :

http://tgolden.sc.sabren.com/python/wmi.html

코드:

'''
Monitor window processes

derived from:
>for sys available mem
http://msdn2.microsoft.com/en-us/library/aa455130.aspx

> individual process information and python script examples
http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true

NOTE: the WMI interface/process is also available for performing similar tasks
        I'm not using it here because the current method covers my needs, but if someday it's needed
        to extend or improve this module, then may want to investigate the WMI tools available.
        WMI for python:
        http://tgolden.sc.sabren.com/python/wmi.html
'''

__revision__ = 3

import win32com.client
from ctypes import *
from ctypes.wintypes import *
import pythoncom
import pywintypes
import datetime


class MEMORYSTATUS(Structure):
    _fields_ = [
                ('dwLength', DWORD),
                ('dwMemoryLoad', DWORD),
                ('dwTotalPhys', DWORD),
                ('dwAvailPhys', DWORD),
                ('dwTotalPageFile', DWORD),
                ('dwAvailPageFile', DWORD),
                ('dwTotalVirtual', DWORD),
                ('dwAvailVirtual', DWORD),
                ]


def winmem():
    x = MEMORYSTATUS() # create the structure
    windll.kernel32.GlobalMemoryStatus(byref(x)) # from cytypes.wintypes
    return x    


class process_stats:
    '''process_stats is able to provide counters of (all?) the items available in perfmon.
    Refer to the self.supported_types keys for the currently supported 'Performance Objects'

    To add logging support for other data you can derive the necessary data from perfmon:
    ---------
    perfmon can be run from windows 'run' menu by entering 'perfmon' and enter.
    Clicking on the '+' will open the 'add counters' menu,
    From the 'Add Counters' dialog, the 'Performance object' is the self.support_types key.
    --> Where spaces are removed and symbols are entered as text (Ex. # == Number, % == Percent)
    For the items you wish to log add the proper attribute name in the list in the self.supported_types dictionary,
    keyed by the 'Performance Object' name as mentioned above.
    ---------

    NOTE: The 'NETFramework_NETCLRMemory' key does not seem to log dotnet 2.0 properly.

    Initially the python implementation was derived from:
    http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
    '''
    def __init__(self,process_name_list=[],perf_object_list=[],filter_list=[]):
        '''process_names_list == the list of all processes to log (if empty log all)
        perf_object_list == list of process counters to log
        filter_list == list of text to filter
        print_results == boolean, output to stdout
        '''
        pythoncom.CoInitialize() # Needed when run by the same process in a thread

        self.process_name_list = process_name_list
        self.perf_object_list = perf_object_list
        self.filter_list = filter_list

        self.win32_perf_base = 'Win32_PerfFormattedData_'

        # Define new datatypes here!
        self.supported_types = {
                                    'NETFramework_NETCLRMemory':    [
                                                                        'Name',
                                                                        'NumberTotalCommittedBytes',
                                                                        'NumberTotalReservedBytes',
                                                                        'NumberInducedGC',    
                                                                        'NumberGen0Collections',
                                                                        'NumberGen1Collections',
                                                                        'NumberGen2Collections',
                                                                        'PromotedMemoryFromGen0',
                                                                        'PromotedMemoryFromGen1',
                                                                        'PercentTimeInGC',
                                                                        'LargeObjectHeapSize'
                                                                     ],

                                    'PerfProc_Process':              [
                                                                          'Name',
                                                                          'PrivateBytes',
                                                                          'ElapsedTime',
                                                                          'IDProcess',# pid
                                                                          'Caption',
                                                                          'CreatingProcessID',
                                                                          'Description',
                                                                          'IODataBytesPersec',
                                                                          'IODataOperationsPersec',
                                                                          'IOOtherBytesPersec',
                                                                          'IOOtherOperationsPersec',
                                                                          'IOReadBytesPersec',
                                                                          'IOReadOperationsPersec',
                                                                          'IOWriteBytesPersec',
                                                                          'IOWriteOperationsPersec'     
                                                                      ]
                                }

    def get_pid_stats(self, pid):
        this_proc_dict = {}

        pythoncom.CoInitialize() # Needed when run by the same process in a thread
        if not self.perf_object_list:
            perf_object_list = self.supported_types.keys()

        for counter_type in perf_object_list:
            strComputer = "."
            objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
            objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")

            query_str = '''Select * from %s%s''' % (self.win32_perf_base,counter_type)
            colItems = objSWbemServices.ExecQuery(query_str) # "Select * from Win32_PerfFormattedData_PerfProc_Process")# changed from Win32_Thread        

            if len(colItems) > 0:        
                for objItem in colItems:
                    if hasattr(objItem, 'IDProcess') and pid == objItem.IDProcess:

                            for attribute in self.supported_types[counter_type]:
                                eval_str = 'objItem.%s' % (attribute)
                                this_proc_dict[attribute] = eval(eval_str)

                            this_proc_dict['TimeStamp'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.') + str(datetime.datetime.now().microsecond)[:3]
                            break

        return this_proc_dict      


    def get_stats(self):
        '''
        Show process stats for all processes in given list, if none given return all processes   
        If filter list is defined return only the items that match or contained in the list
        Returns a list of result dictionaries
        '''    
        pythoncom.CoInitialize() # Needed when run by the same process in a thread
        proc_results_list = []
        if not self.perf_object_list:
            perf_object_list = self.supported_types.keys()

        for counter_type in perf_object_list:
            strComputer = "."
            objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
            objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")

            query_str = '''Select * from %s%s''' % (self.win32_perf_base,counter_type)
            colItems = objSWbemServices.ExecQuery(query_str) # "Select * from Win32_PerfFormattedData_PerfProc_Process")# changed from Win32_Thread

            try:  
                if len(colItems) > 0:
                    for objItem in colItems:
                        found_flag = False
                        this_proc_dict = {}

                        if not self.process_name_list:
                            found_flag = True
                        else:
                            # Check if process name is in the process name list, allow print if it is
                            for proc_name in self.process_name_list:
                                obj_name = objItem.Name
                                if proc_name.lower() in obj_name.lower(): # will log if contains name
                                    found_flag = True
                                    break

                        if found_flag:
                            for attribute in self.supported_types[counter_type]:
                                eval_str = 'objItem.%s' % (attribute)
                                this_proc_dict[attribute] = eval(eval_str)

                            this_proc_dict['TimeStamp'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.') + str(datetime.datetime.now().microsecond)[:3]
                            proc_results_list.append(this_proc_dict)

            except pywintypes.com_error, err_msg:
                # Ignore and continue (proc_mem_logger calls this function once per second)
                continue
        return proc_results_list     


def get_sys_stats():
    ''' Returns a dictionary of the system stats'''
    pythoncom.CoInitialize() # Needed when run by the same process in a thread
    x = winmem()

    sys_dict = { 
                    'dwAvailPhys': x.dwAvailPhys,
                    'dwAvailVirtual':x.dwAvailVirtual
                }
    return sys_dict


if __name__ == '__main__':
    # This area used for testing only
    sys_dict = get_sys_stats()

    stats_processor = process_stats(process_name_list=['process2watch'],perf_object_list=[],filter_list=[])
    proc_results = stats_processor.get_stats()

    for result_dict in proc_results:
        print result_dict

    import os
    this_pid = os.getpid()
    this_proc_results = stats_processor.get_pid_stats(this_pid)

    print 'this proc results:'
    print this_proc_results

http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python


이전 값은 잘못된 값을 반환 할 수 있으므로 GlobalMemoryStatus 대신 GlobalMemoryStatusEx를 사용하십시오.
phobie

7
from x import *진술 을 피해야 합니다! 주 네임 스페이스를 어지럽히고 다른 함수와 변수를 덮어 씁니다.
phobie

6

우리는 여유 메모리에서 순간적인 변동을 발견 할 수 있고 meminfo 데이터 소스를 쿼리하는 것이 도움이되었다고 느꼈기 때문에 일반적인 정보 소스를 사용하기로 선택했습니다 . 또한 사전 분석 된 몇 가지 관련 매개 변수를 얻는 데 도움이되었습니다.

암호

import os

linux_filepath = "/proc/meminfo"
meminfo = dict(
    (i.split()[0].rstrip(":"), int(i.split()[1]))
    for i in open(linux_filepath).readlines()
)
meminfo["memory_total_gb"] = meminfo["MemTotal"] / (2 ** 20)
meminfo["memory_free_gb"] = meminfo["MemFree"] / (2 ** 20)
meminfo["memory_available_gb"] = meminfo["MemAvailable"] / (2 ** 20)

참조 출력 (추가 분석을 위해 모든 줄 바꿈 제거)

MemTotal : 1014500 kB MemFree : 562680 kB 사용 가능 : 646364 kB 버퍼 : 15144 kB 캐시 됨 : 210720 kB 스왑 캐시 : 0 kB 활성 : 261476 kB 비활성 : 128888 kB 활성 (anon) : 167092 kB 비활성 (anon) : 20888 kB 활성 (파일) : 94384 kB 비활성 (파일) : 108000 kB 제거 불가 : 3652 kB Mlocked : 3652 kB SwapTotal : 0 kB SwapFree : 0 kB Dirty : 0 kB Writeback : 0 kB AnonPages : 168160 kB 매핑 됨 : 81352 kB Shmem : 21060 kB 슬래브 : 34492 kB Sreclaimable : 18044 kB SUnreclaim : 16448 kB KernelStack : 2672 kB PageTables : 8180 kB NFS_Unstable : 0 kB Bounce : 0 kB WritebackTmp : 0 kB CommitLimit : 507248 kB Committed_AS : 1038756 kB VmallocTotal : 34359738367 kB Vumloc 사용 : 하드웨어 : 0 kB AnonHuge 페이지 : 88064 kB CmaTotal : 0 kB CmaFree : 0 kB HugePages_Total : 0 HugePages_Free : 0 HugePages_Rsvd : 0 HugePages_Surp : 0 Hugepages 크기 :2048 kB DirectMap4k : 43008 kB DirectMap2M : 1005568 kB


예상대로 작동하지 않는 것 같습니다 : stackoverflow.com/q/61498709/562769
Martin Thoma

4

이 답변은 Python 2 용으로 작성된 것 같으며 어떤 경우에도 resourcePython 3에서 사용할 수 있는 표준 패키지에 대해 언급 한 사람이 없습니다 . 주어진 프로세스 (기본적으로 Python 프로세스 호출) 의 리소스 제한 을 얻는 명령을 제공합니다 . 이것은 시스템이 전체 리소스를 현재 사용 하는 것과 동일하지 않지만 "이 스크립트에는 X 개의 RAM 만 사용하고 싶습니다"와 같은 동일한 문제를 해결할 수 있습니다.


3

"... 현재 시스템 상태 (현재 CPU, RAM, 디스크 여유 공간 등)"및 "* nix 및 Windows 플랫폼"은 달성하기 어려운 조합 일 수 있습니다.

운영 체제는 이러한 리소스를 관리하는 방식이 근본적으로 다릅니다. 실제로, 시스템으로 계산하는 것과 응용 프로그램 시간으로 계산하는 것을 정의하는 것과 같은 핵심 개념이 다릅니다.

"사용 가능한 디스크 공간"? "디스크 공간"이란 무엇입니까? 모든 장치의 모든 파티션? 멀티 부트 환경에서 외부 파티션은 어떻습니까?

이를 가능하게하는 Windows와 * nix 사이에 충분한 합의가 있다고 생각하지 않습니다. 실제로 Windows라는 다양한 운영 체제 간에는 합의가 이루어지지 않을 수도 있습니다. XP와 Vista에서 모두 작동하는 단일 Windows API가 있습니까?


4
df -hWindows와 * nix 모두에서 "디스크 공간"질문에 대답합니다.
jfs

4
@JFSebastian : 어느 창? Windows XP Pro에서 'df'가 인식되지 않습니다 ... 오류 메시지가 나타납니다. 내가 무엇을 놓치고 있습니까?
S.Lott

3
Windows에도 새 프로그램을 설치할 수 있습니다.
jfs

2

CPU 사용을위한이 스크립트 :

import os

def get_cpu_load():
    """ Returns a list CPU Loads"""
    result = []
    cmd = "WMIC CPU GET LoadPercentage "
    response = os.popen(cmd + ' 2>&1','r').read().strip().split("\r\n")
    for load in response[1:]:
       result.append(int(load))
    return result

if __name__ == '__main__':
    print get_cpu_load()

1
  • CPU 세부 사항은 psutil 라이브러리를 사용하십시오.

    https://psutil.readthedocs.io/en/latest/#cpu

  • RAM 주파수 (MHz)의 경우 내장 Linux 라이브러리 dmidecode 를 사용하고 출력을 약간 조작하십시오. 이 명령에는 루트 권한이 필요하므로 암호도 제공하십시오. 다음 암호를 사용 하여 mypass 를 암호로 바꾸 십시오.

import os

os.system("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2")

------------------- 출력 ---------------------------
1600 MT / 의
알 수는
1600 MT / s의
알 수없는 0

  • 보다 구체적으로
    [i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]

-------------------------- 출력 ----------------------- -
[ '1600', '1600']


좀 더 설명을 추가
Paras Korat

1

의 GET에 줄 단위 프로그램의 메모리와 시간 분석을, 내가 사용하는 것이 좋습니다 memory_profilerline_profiler.

설치:

# Time profiler
$ pip install line_profiler
# Memory profiler
$ pip install memory_profiler
# Install the dependency for a faster analysis
$ pip install psutil

일반적인 부분은 각 데코레이터를 사용하여 분석하려는 기능을 지정하는 것입니다.

예 : 파이썬 파일 main.py에 분석하려는 여러 함수가 있습니다. 그들 중 하나는입니다 linearRegressionfit(). @profileTime & Memory와 관련하여 코드를 프로파일 링하는 데 도움이 되는 데코레이터를 사용해야합니다 .

함수 정의를 다음과 같이 변경하십시오.

@profile
def linearRegressionfit(Xt,Yt,Xts,Yts):
    lr=LinearRegression()
    model=lr.fit(Xt,Yt)
    predict=lr.predict(Xts)
    # More Code

들어 시간 프로파일 링 ,

운영:

$ kernprof -l -v main.py

산출

Total time: 0.181071 s
File: main.py
Function: linearRegressionfit at line 35

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    35                                           @profile
    36                                           def linearRegressionfit(Xt,Yt,Xts,Yts):
    37         1         52.0     52.0      0.1      lr=LinearRegression()
    38         1      28942.0  28942.0     75.2      model=lr.fit(Xt,Yt)
    39         1       1347.0   1347.0      3.5      predict=lr.predict(Xts)
    40                                           
    41         1       4924.0   4924.0     12.8      print("train Accuracy",lr.score(Xt,Yt))
    42         1       3242.0   3242.0      8.4      print("test Accuracy",lr.score(Xts,Yts))

의 경우 메모리 프로파일 링 ,

운영:

$ python -m memory_profiler main.py

산출

Filename: main.py

Line #    Mem usage    Increment   Line Contents
================================================
    35  125.992 MiB  125.992 MiB   @profile
    36                             def linearRegressionfit(Xt,Yt,Xts,Yts):
    37  125.992 MiB    0.000 MiB       lr=LinearRegression()
    38  130.547 MiB    4.555 MiB       model=lr.fit(Xt,Yt)
    39  130.547 MiB    0.000 MiB       predict=lr.predict(Xts)
    40                             
    41  130.547 MiB    0.000 MiB       print("train Accuracy",lr.score(Xt,Yt))
    42  130.547 MiB    0.000 MiB       print("test Accuracy",lr.score(Xts,Yts))

또한, 메모리 프로파일의 결과는 사용 플롯 될 수 matplotlib사용

$ mprof run main.py
$ mprof plot

여기에 이미지 설명을 입력하십시오 참고 : 테스트

line_profiler 버전 == 3.0.2

memory_profiler 버전 == 0.57.0

psutil 버전 == 5.7.0



0

@Hrabal의 CPU 사용 코드를 기반으로 이것이 내가 사용하는 것입니다.

from subprocess import Popen, PIPE

def get_cpu_usage():
    ''' Get CPU usage on Linux by reading /proc/stat '''

    sub = Popen(('grep', 'cpu', '/proc/stat'), stdout=PIPE, stderr=PIPE)
    top_vals = [int(val) for val in sub.communicate()[0].split('\n')[0].split[1:5]]

    return (top_vals[0] + top_vals[2]) * 100. /(top_vals[0] + top_vals[2] + top_vals[3])

-12

잘 지원되는 다중 플랫폼 라이브러리가 있다고 생각하지 않습니다. 파이썬 자체는 C로 작성되었으므로 모든 라이브러리는 위에서 제안한대로 실행할 OS 특정 코드 스 니펫에 대해 현명한 결정을 내릴 것입니다.


1
이 답변이 다운 보트 된 이유는 무엇입니까? 이 진술이 거짓입니까?
EAzevedo 2016 년

4
psutil은 운영 요구에 적합한 잘 지원되는 다중 플랫폼 라이브러리이기 때문에
amadain
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.