Obtendo total de RAM / livre de dentro Python
Pergunta
A partir de uma aplicação do Python, como posso obter a quantidade total de RAM do sistema e como muito do que é atualmente livre, de uma forma multi-plataforma?
O ideal é que a quantidade de RAM livre deve considerar apenas memória física que pode realmente ser atribuída ao processo Python.
Solução
Você já tentou SIGAR - System Information Gatherer E Reporter ? Depois de instalar
import os, sigar
sg = sigar.open()
mem = sg.mem()
sg.close()
print mem.total() / 1024, mem.free() / 1024
Espero que isso ajude
Outras dicas
psutil seria outra boa opção. Ele também precisa de uma biblioteca instalada no entanto.
>>> import psutil
>>> psutil.virtual_memory()
vmem(total=8374149120L, available=2081050624L, percent=75.1,
used=8074080256L, free=300068864L, active=3294920704,
inactive=1361616896, buffers=529895424L, cached=1251086336)
Para a parte de memória livre, há uma função na biblioteca wx:
wx.GetFreeMemory()
Infelizmente, isso só funciona no Windows. portas Linux e Mac tanto retorno "-1" ou aumentar a NotImplementedError
.
Você não pode fazer isso com apenas a biblioteca Python padrão, embora possa haver algum terceiro pacote partido que faz isso. Exceto isso, você pode usar o pacote de sistema operacional para determinar qual sistema operacional você está e usar essa informação para adquirir a informação que você quer para aquele sistema (e encapsular isso em uma única função multi-plataforma).
No windows eu utilizar este método. É meio hacky mas funciona usando a biblioteca Standard OS:
import os
process = os.popen('wmic memorychip get capacity')
result = process.read()
process.close()
totalMem = 0
for m in result.split(" \r\n")[1:-1]:
totalMem += int(m)
print totalMem / (1024**3)