Qual é a sua maneira preferida de obter o status atual do sistema (CPU atual, RAM, espaço livre em disco etc.) no Python? Pontos de bônus para as plataformas * nix e Windows.
Parece haver algumas maneiras possíveis de extrair isso da minha pesquisa:
Usando uma biblioteca como PSI (que atualmente não parece ativamente desenvolvida e não é suportada em várias plataformas) ou algo como pystatgrab (novamente nenhuma atividade desde 2007 parece e nenhum suporte para o Windows).
Usando código específico da plataforma, como a
os.popen("ps")
ou similar para os sistemas * nix eMEMORYSTATUS
emctypes.windll.kernel32
(consulte esta receita no ActiveState ) para a plataforma Windows. Pode-se montar uma classe Python com todos esses trechos de código.
Não é que esses métodos sejam ruins, mas já existe uma maneira bem suportada e multiplataforma de fazer a mesma coisa?
Respostas:
A biblioteca psutil fornece informações sobre CPU, RAM etc. em várias plataformas:
Alguns exemplos:
Aqui está outra documentação que fornece mais conceitos e conceitos de interesse:
fonte
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
e>>> psutil.virtual_memory()
que retorna um bom objeto vmem:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Use a biblioteca psutil . No Ubuntu 18.04, o pip instalou o 5.5.0 (versão mais recente) a partir de 30/01/2019. As versões mais antigas podem se comportar de maneira um pouco diferente. Você pode verificar sua versão do psutil fazendo isso no Python:
Para obter algumas estatísticas de memória e CPU:
A
virtual_memory
(tupla) terá a porcentagem de memória usada em todo o sistema. Isso pareceu ter sido superestimado em alguns por cento para mim no Ubuntu 18.04.Você também pode obter a memória usada pela instância atual do Python:
que fornece o uso atual da memória do seu script Python.
Existem alguns exemplos mais detalhados na página pypi para psutil .
fonte
Somente para Linux: One-liner para uso de RAM com apenas dependência stdlib:
editar: dependência do SO da solução especificada
fonte
os.popen('free -th').readlines()[-1].split()[1:]
. Observe que essa linha retorna uma lista de seqüências de caracteres.python:3.8-slim-buster
não temfree
Os códigos abaixo, sem bibliotecas externas, funcionaram para mim. Eu testei no Python 2.7.9
Utilização do CPU
E uso de RAM, total, usado e gratuito
fonte
grep
eawk
seria melhor cuidar do processamento de strings no Python?Aqui está uma coisa que eu montei há um tempo atrás: são apenas janelas, mas podem ajudá-lo a fazer parte do que você precisa fazer.
Derivado de: "para sys mem disponível" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
"informações de processos individuais e exemplos de scripts python" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
NOTA: a interface / processo WMI também está disponível para executar tarefas semelhantes. Não o estou usando aqui porque o método atual cobre minhas necessidades, mas se algum dia for necessário estender ou melhorar isso, talvez você queira investigar as ferramentas WMI disponíveis. .
WMI para python:
http://tgolden.sc.sabren.com/python/wmi.html
O código:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
fonte
from x import *
declarações! Eles desorganizam o namespace principal e sobrescrevem outras funções e variáveis.Optamos por usar a fonte de informações usual para isso, porque pudemos encontrar flutuações instantâneas na memória livre e achamos útil consultar a fonte de dados do meminfo . Isso também nos ajudou a obter mais alguns parâmetros relacionados que foram pré-analisados.
Código
Saída para referência (removemos todas as novas linhas para análise posterior)
fonte
Sinto que essas respostas foram escritas para o Python 2 e, de qualquer forma, ninguém mencionou o
resource
pacote padrão disponível para o Python 3. Ele fornece comandos para obter os limites de recursos de um determinado processo (o processo de chamada do Python por padrão). Isso não é o mesmo que obter o uso atual dos recursos pelo sistema como um todo, mas pode resolver alguns dos mesmos problemas, como por exemplo: "Quero ter certeza de usar apenas muita memória X com esse script".fonte
"... status atual do sistema (CPU atual, RAM, espaço livre em disco etc.)" "E" * nix e plataformas Windows "podem ser uma combinação difícil de alcançar.
Os sistemas operacionais são fundamentalmente diferentes na maneira como gerenciam esses recursos. De fato, eles diferem nos conceitos principais, como definir o que conta como sistema e o que conta como tempo de aplicação.
"Espaço livre em disco"? O que conta como "espaço em disco?" Todas as partições de todos os dispositivos? E as partições estrangeiras em um ambiente de inicialização múltipla?
Eu não acho que exista um consenso claro o suficiente entre o Windows e o * nix que torne isso possível. De fato, pode não haver nenhum consenso entre os vários sistemas operacionais chamados Windows. Existe uma única API do Windows que funcione no XP e no Vista?
fonte
df -h
responde à pergunta "espaço em disco" no Windows e no * nix.Este script para uso da CPU:
fonte
Para detalhes da CPU, use a biblioteca psutil
Para Frequência de RAM (em MHz), use a biblioteca Linux integrada dmidecode e manipule um pouco a saída;). este comando precisa de permissão root, portanto, forneça sua senha também. basta copiar o seguinte comentário substituindo mypass por sua senha
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
fonte
Para obter uma memória linha por linha e análise de tempo do seu programa, sugiro usar
memory_profiler
eline_profiler
.Instalação:
A parte comum é que você especifica qual função deseja analisar usando os respectivos decoradores.
Exemplo: Eu tenho várias funções no meu arquivo Python
main.py
que desejo analisar. Um deles élinearRegressionfit()
. Preciso usar o decorador@profile
que me ajuda a traçar o código no que diz respeito a: Tempo e memória.Faça as seguintes alterações na definição da função
Para criação de perfil de tempo ,
Corre:
Resultado
Para perfil de memória ,
Corre:
Resultado
Além disso, os resultados do perfilador de memória também podem ser plotados usando o
matplotlib
uso deNota: Testado em
line_profiler
version == 3.0.2memory_profiler
version == 0.57.0psutil
version == 5.7.0fonte
Você pode usar psutil ou psmem com código de exemplo de subprocesso
Referência http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
fonte
Com base no código de uso da CPU por @Hrabal, é isso que eu uso:
fonte
Não acredito que exista uma biblioteca multiplataforma bem suportada disponível. Lembre-se de que o próprio Python é escrito em C; portanto, qualquer biblioteca simplesmente tomará uma decisão inteligente sobre qual trecho de código específico do SO executar, como sugerido acima.
fonte