Làm thế nào để có được mức sử dụng CPU và RAM hiện tại trong Python?


333

Cách ưa thích của bạn để có được trạng thái hệ thống hiện tại (CPU hiện tại, RAM, dung lượng đĩa trống, v.v.) trong Python là gì? Điểm thưởng cho các nền tảng * nix và Windows.

Dường như có một vài cách có thể trích xuất từ ​​tìm kiếm của tôi:

  1. Sử dụng một thư viện như PSI (hiện tại dường như không được phát triển tích cực và không được hỗ trợ trên nhiều nền tảng) hoặc một cái gì đó như pystatgrab (một lần nữa không có hoạt động nào kể từ năm 2007 và dường như không hỗ trợ cho Windows).

  2. Sử dụng mã cụ thể của nền tảng, chẳng hạn như sử dụng một os.popen("ps")hoặc tương tự cho các hệ thống * nix và MEMORYSTATUStrong ctypes.windll.kernel32(xem công thức này trên ActiveState ) cho nền tảng Windows. Người ta có thể đặt một lớp Python cùng với tất cả các đoạn mã đó.

Không phải những phương pháp đó là xấu nhưng đã có một cách đa nền tảng được hỗ trợ tốt để làm điều tương tự chưa?


Bạn có thể xây dựng thư viện đa nền tảng của riêng mình bằng cách sử dụng nhập động: "if sys.pl platform == 'win32': nhập win_sysstatus dưới dạng sysstatus; khác" ...
John Fouhy

1
Thật tuyệt khi có một cái gì đó hoạt động trên App Engine.
Attila O.

Là tuổi của các gói đáng kể? Nếu ai đó có được chúng ngay lần đầu tiên, tại sao họ vẫn không đúng?
Paul Smith

Câu trả lời:


408

Thư viện psutil sẽ cung cấp cho bạn một số thông tin hệ thống (sử dụng CPU / Bộ nhớ) trên nhiều nền tảng khác nhau:

psutil là một mô-đun cung cấp giao diện để truy xuất thông tin về các quy trình đang chạy và sử dụng hệ thống (CPU, bộ nhớ) theo cách di động bằng cách sử dụng Python, thực hiện nhiều chức năng được cung cấp bởi các công cụ như trình quản lý tác vụ ps, top và Windows.

Nó hiện hỗ trợ Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD và NetBSD, cả kiến ​​trúc 32 bit và 64 bit, với các phiên bản Python từ 2.6 đến 3.5 (người dùng Python 2.4 và 2.5 có thể sử dụng phiên bản 2.1.3).


CẬP NHẬT: Dưới đây là một số cách sử dụng ví dụ về psutil:

#!/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())

33
Làm việc cho tôi trên OSX : $ pip install psutil; >>> import psutil; psutil.cpu_percent()>>> psutil.virtual_memory()trả về một đối tượng vmem đẹp:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
hobs

12
Làm thế nào một người sẽ làm điều này mà không có thư viện psutil?
BigBrownBear00

2
@ user1054424 Có một thư viện dựng sẵn trong python gọi là resource . Tuy nhiên, có vẻ như hầu hết bạn có thể làm với nó là lấy bộ nhớ mà một quá trình python đang sử dụng và / hoặc đó là các tiến trình con. Nó cũng không có vẻ rất chính xác. Một thử nghiệm nhanh cho thấy tài nguyên bị tắt khoảng 2MB từ công cụ tiện ích của máy Mac của tôi.
Austin A

12
@ BigBrownBear00 chỉ cần kiểm tra nguồn của psutil;)
Mehulkumar

1
@Jon Cage hi Jon, tôi có thể kiểm tra với bạn về sự khác biệt giữa bộ nhớ trống và bộ nhớ còn trống không? Tôi đang dự định sử dụng psutil.virtual_memory () để xác định số lượng dữ liệu tôi có thể tải vào bộ nhớ để phân tích. Cảm ơn bạn đã giúp đỡ!
AiRiFiEd

66

Sử dụng thư viện psutil . Trên Ubuntu 18.04, pip đã cài đặt 5.5.0 (phiên bản mới nhất) kể từ ngày 1-30-2019. Các phiên bản cũ hơn có thể hành xử hơi khác nhau. Bạn có thể kiểm tra phiên bản psutil của mình bằng cách thực hiện điều này trong Python:

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

Để có được một số chỉ số bộ nhớ và 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( Bộ ) sẽ có phần trăm bộ nhớ được sử dụng trên toàn hệ thống. Điều này dường như được đánh giá quá cao bởi một vài phần trăm đối với tôi trên Ubuntu 18.04.

Bạn cũng có thể lấy bộ nhớ được sử dụng bởi cá thể Python hiện tại:

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)

cung cấp cho bộ nhớ hiện tại sử dụng tập lệnh Python của bạn.

Có một số ví dụ sâu hơn trên trang pypi cho psutil .


31

Chỉ dành cho Linux: Một lớp lót cho việc sử dụng RAM chỉ với phụ thuộc stdlib:

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

chỉnh sửa: chỉ định giải pháp phụ thuộc hệ điều hành


1
Rất hữu ích! Để có được nó trực tiếp trong các đơn vị có thể đọc được của con người : os.popen('free -th').readlines()[-1].split()[1:]. Lưu ý rằng dòng này trả về một danh sách các chuỗi.
iipr

Các python:3.8-slim-busterkhông cófree
Martin Thoma

21

Dưới đây mã, không có thư viện bên ngoài làm việc cho tôi. Tôi đã thử nghiệm tại Python 2.7.9

Sử dụng 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)

Và sử dụng Ram, tổng, sử dụng và miễn phí

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
Bạn không nghĩ rằng grepawksẽ được chăm sóc tốt hơn bằng cách xử lý chuỗi trong Python?
Reinderien

Cá nhân không quen thuộc với awk, đã tạo ra một phiên bản tuyệt vời của đoạn sử dụng cpu bên dưới. Rất tiện dụng, cảm ơn!
Jay

3
Thật thiếu sót khi nói rằng mã này không sử dụng các thư viện bên ngoài. Trong thực tế, những thứ này có một sự phụ thuộc lớn vào sự sẵn có của grep, awk và miễn phí. Điều này làm cho mã ở trên không di động. OP tuyên bố "Điểm thưởng cho các nền tảng * nix và Windows."
Thuyền trưởng Lepton

10

Đây là thứ tôi đã kết hợp trước đây, nó chỉ là cửa sổ nhưng có thể giúp bạn có được một phần của những gì bạn cần làm.

Bắt nguồn từ: "cho sys có sẵn mem" http://msdn2.microsoft.com/en-us/l Library / aa455130.aspx

"thông tin quy trình cá nhân và ví dụ tập lệnh python" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true

LƯU Ý: Giao diện / quy trình WMI cũng có sẵn để thực hiện các tác vụ tương tự Tôi không sử dụng ở đây vì phương pháp hiện tại đáp ứng nhu cầu của tôi, nhưng nếu một ngày nào đó cần phải mở rộng hoặc cải thiện điều này, thì có thể muốn điều tra các công cụ WMI có sẵn .

WMI cho trăn:

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

Mật mã:

'''
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-loggging-python


Sử dụng GlobalMemoryStatusEx thay vì GlobalMemoryStatus vì cái cũ có thể trả về các giá trị xấu.
phobie

7
Bạn nên tránh những from x import *tuyên bố! Chúng làm lộn xộn không gian tên chính và ghi đè các hàm và biến khác.
phobie

6

Chúng tôi đã chọn sử dụng nguồn thông tin thông thường cho việc này vì chúng tôi có thể tìm thấy sự dao động tức thời trong bộ nhớ trống và cảm thấy việc truy vấn nguồn dữ liệu meminfo là hữu ích. Điều này cũng giúp chúng tôi có thêm một vài tham số liên quan đã được phân tích cú pháp trước.

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)

Đầu ra để tham khảo (chúng tôi đã loại bỏ tất cả các dòng mới để phân tích thêm)

MemTotal: 1014500 kB MemFree: 562680 kB MemAv Available: 646364 kB Bộ đệm: 15144 kB Đã lưu: 210720 kB SwapCached: 0 kB Hoạt động: 261476 kB Đang hoạt động: 128888 kB Hoạt động (anon): 168888 kB Hoạt động (anon) : 94384 kB Không hoạt động (tệp): 108000 kB Không thể xác định: 3652 kB Bị khóa: 3652 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB WritBack: 0 kB AnonPages: 168160 kB Maps SReclaimable: 18044 kB SUnreclaim: 16448 kB KernelStack: 2648 kB KernelStack: 2672 kB PageTables: 8180 kB NFS_Un ổn định: 080 kB_Bat_bạn: 0 kB bẻ khóa: 0 kB 0 kB AnonHugePages: 88064 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize:2048 kB DirectMap4k: 43008 kB DirectMap2M: 1005568 kB


Có vẻ không hoạt động như mong đợi: stackoverflow.com/q/61498709/562769
Martin Thoma

4

Tôi cảm thấy như những câu trả lời này được viết cho Python 2 và trong mọi trường hợp không ai đề cập đến resourcegói tiêu chuẩn có sẵn cho Python 3. Nó cung cấp các lệnh để đạt được các giới hạn tài nguyên của một quy trình nhất định (theo quy trình gọi Python theo mặc định). Điều này không giống với việc sử dụng toàn bộ tài nguyên hiện tại của hệ thống, nhưng nó có thể giải quyết một số vấn đề tương tự như "Tôi muốn đảm bảo rằng tôi chỉ sử dụng X nhiều RAM với tập lệnh này."


3

"... trạng thái hệ thống hiện tại (CPU hiện tại, RAM, dung lượng ổ đĩa trống, v.v.)" Và "* nix và nền tảng Windows" có thể là một sự kết hợp khó đạt được.

Các hệ điều hành về cơ bản là khác nhau trong cách chúng quản lý các tài nguyên này. Thật vậy, chúng khác nhau trong các khái niệm cốt lõi như xác định cái gì được tính là hệ thống và cái gì được tính là thời gian ứng dụng.

"Không gian trống của đĩa"? Cái gì được coi là "không gian đĩa?" Tất cả các phân vùng của tất cả các thiết bị? Còn phân vùng nước ngoài trong môi trường đa khởi động thì sao?

Tôi không nghĩ rằng có một sự đồng thuận rõ ràng đủ giữa Windows và * nix để thực hiện điều này. Thật vậy, thậm chí có thể không có bất kỳ sự đồng thuận nào giữa các hệ điều hành khác nhau được gọi là Windows. Có một API Windows duy nhất hoạt động cho cả XP và Vista không?


4
df -htrả lời câu hỏi "dung lượng đĩa" cả trên Windows và * nix.
jfs

4
@JFSebastian: Windows nào? Tôi nhận được thông báo lỗi 'df' từ Windows XP Pro. Tôi đang thiếu gì?
S.Lott

3
bạn cũng có thể cài đặt các chương trình mới trên Windows.
JFS

2

Kịch bản này để sử dụng 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
  • Để biết chi tiết về CPU, hãy sử dụng thư viện psutil

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

  • Đối với Tần số RAM (tính bằng MHz), hãy sử dụng dmidecode trong thư viện Linux tích hợp và thao tác đầu ra một chút;). lệnh này cần sự cho phép root do đó cũng cung cấp mật khẩu của bạn. chỉ cần sao chép phần sau đây thay thế mypass bằng mật khẩu của bạn

import os

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

------------------- Đầu ra ---------------------------
1600 MT / s
Không rõ
1600 MT / s
Không rõ 0

  • cụ thể hơn
    [i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]

-------------------------- đầu ra ----------------------- -
['1600', '1600']


thêm một số mô tả
Paras Korat

1

Để có được bộ nhớ từng dòng và phân tích thời gian của chương trình của bạn, tôi khuyên bạn nên sử dụng memory_profilerline_profiler .

Cài đặt:

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

Phần phổ biến là, bạn chỉ định chức năng nào bạn muốn phân tích bằng cách sử dụng các trình trang trí tương ứng.

Ví dụ: Tôi có một số hàm trong tệp Python main.pymà tôi muốn phân tích. Một trong số đó là linearRegressionfit(). Tôi cần sử dụng trang trí@profile giúp tôi lập hồ sơ mã liên quan đến cả hai: Thời gian & Bộ nhớ.

Thực hiện các thay đổi sau cho định nghĩa hàm

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

Đối với hồ sơ thời gian ,

Chạy:

$ kernprof -l -v main.py

Đầu ra

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))

Đối với hồ sơ bộ nhớ ,

Chạy:

$ python -m memory_profiler main.py

Đầu ra

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))

Ngoài ra, kết quả trình hồ sơ bộ nhớ cũng có thể được vẽ bằng matplotlibcách sử dụng

$ mprof run main.py
$ mprof plot

nhập mô tả hình ảnh ở đây Lưu ý: Đã thử nghiệm trên

line_profiler phiên bản == 3.0.2

memory_profiler phiên bản == 0,57.0

psutil phiên bản == 5.7.0



0

Dựa trên mã sử dụng cpu của @Hrabal, đây là những gì tôi sử dụng:

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

Tôi không tin rằng có một thư viện đa nền tảng được hỗ trợ tốt. Hãy nhớ rằng chính Python được viết bằng C nên bất kỳ thư viện nào cũng sẽ đưa ra quyết định thông minh về đoạn mã dành riêng cho hệ điều hành nào, như bạn đã đề xuất ở trên.


1
Tại sao câu trả lời này bị hạ thấp? Là tuyên bố sai?
EAzevedo

4
bởi vì psutil là một thư viện đa nền tảng được hỗ trợ tốt, phù hợp với nhu cầu của các op có thể
amadain
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.