Python сколько памяти использует программа

Get total physical memory in Python

How can I get the total physical memory within Python in a distribution agnostic fashion? I don’t need used memory, just the total physical memory.

/proc is only available when CONFIG_PROC_FS=y . True for desktops, servers, phones, not always true for embedded devices.

You rarely should care about physical memory (imagine for example a virtual processor thru docker etc. )

4 Answers 4

your best bet for a cross-platform solution is to use the psutil package (available on PyPI).

import psutil psutil.virtual_memory().total # total physical memory in Bytes 

Documentation for virtual_memory is here.

Using os.sysconf on Linux:

import os mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') # e.g. 4015976448 mem_gib = mem_bytes/(1024.**3) # e.g. 3.74 
  • SC_PAGE_SIZE is often 4096.
  • SC_PAGESIZE and SC_PAGE_SIZE are equal.
  • For more info, see man sysconf .
  • For MacOS, as per user reports, this works with Python 3.7 but not with Python 3.8.

Using /proc/meminfo on Linux:

meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines()) mem_kib = meminfo['MemTotal'] # e.g. 3921852 

@sorin, os.sysconf(‘SC_PHYS_PAGES’) apparently doesn’t work on OS X. Although the OS X man page for sysconf does make note of _SC_PHYS_PAGES , this seems inaccessible via Python. You may have more luck with psutil . Alternatively, refer to the techniques used in the answers here.

On MacOs, works fine on Python 3.7 but not on Python 3.8.3. Getting ValueError: unrecognized configuration name for os.sysconf(‘SC_PHYS_PAGES’)

Regular expressions work well for this sort of thing, and might help with any minor differences across distributions.

import re with open('/proc/meminfo') as f: meminfo = f.read() matched = re.search(r'^MemTotal:\s+(\d+)', meminfo) if matched: mem_total_kB = int(matched.groups()[0]) 

@JoshuaDetwiler You don’t need to explicitly close files when using contexts like this. When the context (the with block) is closed the file will be with it.

Also @martin-thoma What AWS image are you using, I do not have this issue with the latest amazonlinux2.

This code worked for me without any external library at Python 2.7.9

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] print 'Summary = ' + mem_G print 'Total Memory = ' + mem_T +' MB' 

Easily we can get the Used Memory and Free Memory

 """ 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 'Used Memory = ' + mem_U +' MB' print 'Free Memory = ' + mem_F +' MB' 

Источник

Читайте также:  Html email table styling
Оцените статью