获取Python中的总物理内存

Jus*_*tin 35 python linux memory

如何以分布式无关的方式获取Python中的总物理内存?我不需要使用内存,只需要总物理内存.

Cor*_*erg 51

对于跨平台解决方案,您最好的选择是使用psutil包(可在PyPI上获得).

from psutil import virtual_memory

mem = virtual_memory()
mem.total  # total physical memory available
Run Code Online (Sandbox Code Playgroud)

文档virtual_memory在这里.


Acu*_*nus 44

os.sysconf在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
Run Code Online (Sandbox Code Playgroud)

注意:

  • SC_PAGE_SIZE 通常是4096.
  • SC_PAGESIZE并且SC_PAGE_SIZE是平等的.
  • 有关详细信息,请参阅man sysconf.
  • 对于MacOS,根据未经验证的用户报告,这可能仅适用于Mac≥10.13(High Sierra)且Python≥3.6.4.

/proc/meminfo在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
Run Code Online (Sandbox Code Playgroud)

  • FWIW,`os.sysconf()`方法也适用于Python 3甚至Solaris 10. (2认同)

Set*_*eth 12

正则表达式适用于此类事情,并且可能有助于分布之间的任何细微差别.

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])
Run Code Online (Sandbox Code Playgroud)

  • / proc只存在于Linux上......所以不是跨平台的 (3认同)