How to get current CPU and RAM usage in Python?
How to get current CPU and RAM usage in Python?
What's your preferred way of getting current system status (current CPU, RAM, free disk space, etc.) in Python? Bonus points for *nix and Windows platforms.
There seems to be a few possible ways of extracting that from my search:
Using a library such as PSI (that currently seems not actively developed and not supported on multiple platform) or something like pystatgrab (again no activity since 2007 it seems and no support for Windows).
Using platform specific code such as using a
os.popen("ps")
or similar for the *nix systems andMEMORYSTATUS
inctypes.windll.kernel32
(see this recipe on ActiveState) for the Windows platform. One could put a Python class together with all those code snippets.
It's not that those methods are bad but is there already a well-supported, multi-platform way of doing the same thing?
Answer by user35952 for How to get current CPU and RAM usage in Python?
I don't believe that there is a well-supported multi-platform library available. Remember that Python itself is written in C so any library is simply going to make a smart decision about which OS-specific code snippet to run, as you suggested above.
Answer by S.Lott for How to get current CPU and RAM usage in Python?
"... current system status (current CPU, RAM, free disk space, etc.)" And "*nix and Windows platforms" can be a difficult combination to achieve.
The operating systems are fundamentally different in the way they manage these resources. Indeed, they differ in core concepts like defining what counts as system and what counts as application time.
"Free disk space"? What counts as "disk space?" All partitions of all devices? What about foreign partitions in a multi-boot environment?
I don't think there's a clear enough consensus between Windows and *nix that makes this possible. Indeed, there may not even be any consensus between the various operating systems called Windows. Is there a single Windows API that works for both XP and Vista?
Answer by monkut for How to get current CPU and RAM usage in Python?
Here's something I put together a while ago, it's windows only but may help you get part of what you need done.
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, then may want to investigate the WMI tools a vailable.
WMI for python:
http://tgolden.sc.sabren.com/python/wmi.html
The code:
''' 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
Answer by Jon Cage for How to get current CPU and RAM usage in Python?
The psutil library will give you some system information (CPU / Memory usage) on a variety of platforms:
psutil is a module providing an interface for retrieving information on running processes and system utilization (CPU, memory) in a portable way by using Python, implementing many functionalities offered by tools like ps, top and Windows task manager.
It currently supports Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures, with Python versions from 2.6 to 3.5 (users of Python 2.4 and 2.5 may use 2.1.3 version).
Answer by LeoG for How to get current CPU and RAM usage in Python?
You can use psutil or psmem with subprocess example code
import subprocess cmd = subprocess.Popen(['sudo','./ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) out,error = cmd.communicate() memory = out.splitlines()
Reference http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
Answer by wordsforthewise for How to get current CPU and RAM usage in Python?
Use the psutil library. For me on Ubuntu, pip installed 0.4.3. You can check your version of psutil by doing
from __future__ import print_function import psutil print(psutil.__versi??on__)
in Python.
To get some memory and CPU stats:
from __future__ import print_function import psutil print(psutil.cpu_percent()) # for version 0.5.0 print(psutil.phymem_usage()) # physical memory usage # for version 4.3.0 print(psutil.virtual_memory()) # I think still physical memory use, # the % is the same as psutil.phymem_usage() from 0.5.0
I also like to do:
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)
which gives the current memory use of your Python script.
There are some more in-depth examples on the pypi page for 4.3.0 and 0.5.0.
For Ubuntu 16 and 14, installing from pip gave me version 4.3.0, which doesn't have the phymem_usage() method. To get 0.5.0, download the tar.gz file, then do
tar -xvzf psutil-0.5.0.tar.gz?? cd psutil-0.5.0 sudo python setup.py install
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72
0 comments:
Post a Comment