在Python中获取全部物理内存

我怎样才能以分布不可知的方式获得Python内的全部物理内存? 我不需要使用的内存,只是总的物理内存。

跨平台解决方案的最佳选择是使用psutil包(可在PyPI上获得 )。

 from psutil import virtual_memory mem = virtual_memory() mem.total # total physical memory available 

virtual_memory文档在这里 。

这个答案是用Linux测试的,不适用于MacOS。

使用os.sysconf

 import os mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') # eg 4015976448 mem_gib = mem_bytes/(1024.**3) # eg 3.74 

注意:

  • SC_PAGE_SIZE通常是4096。
  • SC_PAGESIZESC_PAGE_SIZE是相等的。
  • 有关更多信息,请参阅man sysconf

使用/proc/meminfo

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

正则表达式适用于这类事情,并可能有助于分布之间的任何细微差异。

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

这段代码在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' 

很容易我们可以得到使用的内存和自由内存

  """ 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'