Apa cara yang Anda sukai untuk mendapatkan status sistem saat ini (CPU saat ini, RAM, ruang disk kosong, dll.) Dengan Python? Poin bonus untuk * nix dan platform Windows.
Tampaknya ada beberapa cara yang memungkinkan untuk mengekstraksi itu dari pencarian saya:
Menggunakan perpustakaan seperti PSI (yang saat ini tampaknya tidak dikembangkan secara aktif dan tidak didukung pada banyak platform) atau sesuatu seperti pystatgrab (sekali lagi tidak ada aktivitas sejak 2007 tampaknya dan tidak ada dukungan untuk Windows).
Menggunakan kode khusus platform seperti menggunakan
os.popen("ps")
atau serupa untuk sistem * nix danMEMORYSTATUS
masukctypes.windll.kernel32
(lihat resep ini di ActiveState ) untuk platform Windows. Orang bisa menempatkan kelas Python bersama dengan semua potongan kode itu.
Bukannya metode-metode itu buruk tetapi apakah sudah ada cara multi-platform yang didukung dengan baik untuk melakukan hal yang sama?
Jawaban:
Pustaka psutil memberi Anda informasi tentang CPU, RAM, dll., Pada berbagai platform:
Beberapa contoh:
Berikut dokumentasi lain yang menyediakan lebih banyak konsep dan konsep menarik:
sumber
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
dan>>> psutil.virtual_memory()
yang mengembalikan objek vmem yang bagus:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Gunakan perpustakaan psutil . Pada Ubuntu 18.04, pip diinstal 5.5.0 (versi terbaru) pada 1-30-2019. Versi yang lebih lama mungkin berperilaku agak berbeda. Anda dapat memeriksa versi psutil Anda dengan melakukan ini dengan Python:
Untuk mendapatkan statistik memori dan CPU:
The
virtual_memory
(tuple) akan memiliki memori persen digunakan sistem. Ini tampaknya terlalu tinggi beberapa persen untuk saya di Ubuntu 18,04.Anda juga bisa mendapatkan memori yang digunakan oleh instance Python saat ini:
yang memberikan memori saat ini menggunakan skrip Python Anda.
Ada beberapa contoh yang lebih mendalam pada halaman pypi untuk psutil .
sumber
Only for Linux: One-liner untuk penggunaan RAM dengan hanya ketergantungan stdlib:
sunting: ketergantungan OS solusi yang ditentukan
sumber
os.popen('free -th').readlines()[-1].split()[1:]
. Perhatikan bahwa baris ini mengembalikan daftar string.python:3.8-slim-buster
memilikifree
Kode di bawah ini, tanpa perpustakaan eksternal bekerja untuk saya. Saya diuji di Python 2.7.9
Penggunaan CPU
Dan Ram Penggunaan, Total, Bekas dan Gratis
sumber
grep
danawk
akan lebih baik dirawat dengan pemrosesan string dengan Python?Ini adalah sesuatu yang saya kumpulkan beberapa saat yang lalu, ini hanya windows tetapi dapat membantu Anda mendapatkan bagian dari apa yang perlu Anda lakukan.
Berasal dari: "untuk sys tersedia mem" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
"informasi proses individu dan contoh skrip python" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
CATATAN: antarmuka / proses WMI juga tersedia untuk melakukan tugas serupa Saya tidak menggunakannya di sini karena metode saat ini mencakup kebutuhan saya, tetapi jika suatu hari diperlukan untuk memperluas atau meningkatkan ini, maka mungkin ingin menyelidiki alat WMI yang tersedia .
WMI untuk python:
http://tgolden.sc.sabren.com/python/wmi.html
Kode:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
sumber
from x import *
pernyataan! Mereka mengacaukan namespace-utama dan menimpa fungsi dan variabel lainnya.Kami memilih untuk menggunakan sumber informasi yang biasa untuk ini karena kami dapat menemukan fluktuasi instan dalam memori bebas dan merasa meminta sumber data meminfo sangat membantu. Ini juga membantu kami mendapatkan beberapa parameter terkait lainnya yang telah diurai sebelumnya.
Kode
Output untuk referensi (kami menghapus semua baris baru untuk analisis lebih lanjut)
sumber
Saya merasa seperti jawaban-jawaban ini ditulis untuk Python 2, dan dalam hal apa pun tidak ada yang menyebutkan
resource
paket standar yang tersedia untuk Python 3. Ia menyediakan perintah untuk memperoleh batas sumber daya dari proses yang diberikan (proses Python panggilan secara default). Ini tidak sama dengan mendapatkan penggunaan sumber daya saat ini oleh sistem secara keseluruhan, tetapi bisa menyelesaikan beberapa masalah yang sama seperti misalnya "Saya ingin memastikan saya hanya menggunakan X banyak RAM dengan skrip ini."sumber
"... status sistem saat ini (CPU saat ini, RAM, ruang disk kosong, dll.)" Dan "* nix dan platform Windows" dapat menjadi kombinasi yang sulit untuk dicapai.
Sistem operasi pada dasarnya berbeda dalam cara mereka mengelola sumber daya ini. Memang, mereka berbeda dalam konsep inti seperti mendefinisikan apa yang dianggap sebagai sistem dan apa yang dianggap sebagai waktu aplikasi.
"Ruang diska kosong"? Apa yang dianggap sebagai "ruang disk?" Semua partisi semua perangkat? Bagaimana dengan partisi asing di lingkungan multi-boot?
Saya tidak berpikir ada konsensus yang cukup jelas antara Windows dan * nix yang memungkinkan ini. Memang, bahkan mungkin tidak ada konsensus antara berbagai sistem operasi yang disebut Windows. Apakah ada satu API Windows yang berfungsi untuk XP dan Vista?
sumber
df -h
menjawab pertanyaan "ruang disk" pada Windows dan * nix.Script ini untuk penggunaan CPU:
sumber
Untuk detail CPU gunakan pustaka psutil
Untuk Frekuensi RAM (dalam MHz) gunakan dmidecode pustaka Linux bawaan dan sedikit manipulasi hasilnya;). perintah ini membutuhkan izin root, maka sediakan juga kata sandi Anda. cukup salin perintah berikut untuk mengganti mypass dengan kata sandi Anda
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
sumber
Untuk mendapatkan memori baris-demi-baris dan analisis waktu dari program Anda, saya sarankan menggunakan
memory_profiler
danline_profiler
.Instalasi:
Bagian yang umum adalah, Anda menentukan fungsi mana yang ingin Anda analisis dengan menggunakan dekorator masing-masing.
Contoh: Saya memiliki beberapa fungsi di file Python
main.py
saya yang ingin saya analisis. Salah satunya adalahlinearRegressionfit()
. Saya perlu menggunakan dekorator@profile
yang membantu saya membuat profil kode sehubungan dengan keduanya: Waktu & Memori.Buat perubahan berikut pada definisi fungsi
Untuk Pembuatan Profil Waktu ,
Lari:
Keluaran
Untuk Memory Profileing ,
Lari:
Keluaran
Selain itu, hasil memori profiler juga dapat diplot menggunakan
matplotlib
menggunakanCatatan: Diuji pada
line_profiler
versi == 3.0.2memory_profiler
versi == 0,57.0psutil
versi == 5.7.0sumber
Anda dapat menggunakan psutil atau psmem dengan kode contoh subproses
Referensi http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
sumber
Berdasarkan kode penggunaan cpu oleh @Hrabal, inilah yang saya gunakan:
sumber
Saya tidak percaya bahwa ada perpustakaan multi-platform yang didukung dengan baik tersedia. Ingatlah bahwa Python itu sendiri ditulis dalam C sehingga setiap perpustakaan hanya akan membuat keputusan cerdas tentang potongan kode spesifik OS mana yang akan dijalankan, seperti yang Anda sarankan di atas.
sumber