シリーズ記事ディレクトリ
- Python はローコード データ視覚化用の大画面を開発します: pandas.read_excel はテーブルを読み取ります
- エクセルデータを直接読み込んで実現する百度地図のラベリングをPythonで実現
- Python データ可視化開発 (1): Matplotlib ライブラリの基礎知識
- Python データ可視化開発 (2): pandas は Excel データ形式の処理を読み取ります
序文
psutil はオープン ソースのクロスプラットフォーム ライブラリであり、CPU、メモリ、ディスク、ネットワークなどのシステム情報を取得するための便利な機能を提供します。また、psutil は、プロセスの有無の判定、プロセスの一覧の取得、プロセスの詳細情報の取得など、プロセス管理にも使用できます。また、psutil は、ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap など、多くのコマンド ライン ツールによって提供される機能も提供します。
1. psutil モジュールの説明
psutil には例外、クラス、関数関数、および定数が含まれており、関数関数は CPU、ディスク、メモリ、ネットワークなどのシステム情報を取得するために使用されます。クラスは、プロセス管理機能を実装するために使用されます。関数の機能によって、主にCPU、ディスク、メモリ、ネットワークに分けられますが、psutilが提供する機能的な機能をいくつかの側面から紹介します。
メモリ メモリ関連
関数 |
説明 |
virtual_memory() |
合計メモリ、使用可能なメモリ、メモリ使用率、バッファとキャッシュなどを含む、名前付きタプルの形式でメモリ使用量を返します。単位はバイトです。 |
swap_memory() |
スワップ内のページのスワップインおよびスワップアウトを含む、名前付きタプルの形式でスワップ/メモリ使用量を返します。 |
CPU関連
関数 |
説明 |
psutil.cpu_count() |
cpu_count(,[logical]): デフォルトでは論理 CPU の数を返し、logical パラメータが False に設定されている場合は物理 CPU の数を返します。 |
psutil.cpu_percent() |
cpu_percent(,[percpu],[interval]): CPU の使用率を返します.percpu が True の場合,すべての物理コアの使用率を表示します.間隔が 0 でない場合,実行中の平均使用率を表示します.ブロックされたときのインターバル実行時間。 |
psutil.cpu_times() |
cpu_times(,[percpu]): 名前付きタプルの形式で CPU に費やされた時間を返します。percpu=True は、各 CPU に費やされた時間を取得することを意味します |
psutil.cpu_times_percent() |
cpu_times_percent(,[percpu]): 関数は cpu_times とほぼ同じで、文字通りの意味から、この関数が時間のかかる比率を返すことがわかります。 |
psutil.cpu_stats() |
cpu_stats() は、コンテキスト スイッチ、割り込み、softirq、およびシステム コールの数を含む、名前付きタプルの形式で CPU 統計を返します。 |
psutil.cpu_freq() |
cpu_freq([percpu]): CPU 周波数を返します |
ディスク関連
関数 |
説明 |
psutil.disk_io_counters() |
disk_io_counters ([perdisk]): 読み取りと書き込みの数、読み取りと書き込みのバイト数などを含む、名前付きタプルの形式でディスク io 統計 (概要) を返します。perdisk の値が True の場合、単一のディスクの統計情報がリストされます (ディクショナリ: キーはディスク名、値は統計の名前付きタプル)。 |
psutil.disk_partitions() |
disk_partitions([all=False]): ディスク名、マウント ポイント、ファイル システム タイプ、およびその他の情報を含む、マウントされているすべてのディスクを名前付きタプルの形式で返します。all が True の場合、/proc およびその他の特別なファイル システムを含むマウント情報を返します。 |
psutil.disk_usage() |
disk_usage(path): ディスク容量、使用済みディスク容量、ディスク容量使用率などを含む、名前付きタプルの形式で path が配置されているディスクの使用状況を返します。 |
ネットワーク関連
関数 |
説明 |
psutil.net_io_counter([パーニック]) |
現在のシステムの各ネットワーク カードのネットワーク io 統計情報を名前付きタプルの形式で返します。これには、送受信されたバイト数、送受信されたパケット数、エラー、およびパケットの削除が含まれます。pernic が True の場合、すべてのネットワーク カードの統計が一覧表示されます。 |
psutil.net_connections([種類]) |
各ネットワーク接続 (namedtuple) の詳細をリストとして返します。名前付きタプルには、fd、family、type、laddr、raddr、status、pid およびその他の情報が含まれます。kind はフィルタリングする接続のタイプを示し、サポートされている値は次のとおりです: (デフォルトは inet) |
psutil.net_if_addrs() |
IP アドレスと MAC アドレス、サブネット マスクとブロードキャスト アドレスを含む、ネットワーク カードの構成情報をディクショナリの形式で返します。 |
psutil.net_if_stats() |
有効かどうか、通信タイプ、伝送速度、mtu など、ネットワーク カードの詳細情報を返します。 |
psutil.users() |
ユーザー名、ログイン時間、端末、ホスト情報など、現在ログインしているユーザーの情報を名前付きタプルの形式で返します |
psutil.boot_time() |
システムの起動時間をタイムスタンプとして返します |
プロセス管理
関数 |
説明 |
psutil.pids() |
現在実行中のプロセスをリストとして返します |
psutil.pid_exists(1) |
指定された pid が存在するかどうかを判断します |
psutil.process_iter() |
現在実行中のプロセスを繰り返し処理し、各プロセスの Process オブジェクトを返します |
psutil.Process() |
プロセスをカプセル化するには、このクラスのメソッドを使用してプロセスの詳細情報を取得したり、プロセスにシグナルを送信したりできます。 |
2.カプセル化機能
import json
import psutil
import datetime
import socket
import uuid
def get_mac_address():
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
return ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
def get_my_computer():
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
users_list = ",".join([u.name for u in psutil.users()])
start_time = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
sys_info = {
"hostname": hostname, "ip": ip, "mac": get_mac_address(), "user": users_list, "start_time": start_time}
cpu1 = psutil.cpu_count()
cpu2 = str(psutil.cpu_percent(interval=1)) + '%'
cpu = {
"amount": cpu1, "rate": cpu2}
mem = psutil.virtual_memory()
mem_total = round(mem.total / 1024 / 1024 / 1024, 2)
mem_free = round(mem.free / 1024 / 1024 / 1024, 2)
mem_percent = str(mem.percent) + '%'
mem_used = round(mem.used / 1024 / 1024 / 1024, 2)
ddr = {
"total": mem_total, "free": mem_free, "rate": mem_percent, "used": mem_used}
io = psutil.disk_partitions()
disk = []
for i in io:
o = psutil.disk_usage(i.device)
disk_data = {
"disk_name": i.device,
"total": round(o.total / (1024.0 * 1024.0 * 1024.0),1),
"used": round(o.used / (1024.0 * 1024.0 * 1024.0),1),
"surplus": round(o.free / (1024.0 * 1024.0 * 1024.0),1),
"rate": psutil.disk_usage(i.device).percent}
disk.append(disk_data)
net_info = psutil.net_io_counters()
bytes_sent = '{0:.2f}'.format(net_info.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f}'.format(net_info.bytes_sent / 1024 / 1024)
net = {
"bytes_sent": bytes_sent, "bytes_rcvd": bytes_rcvd}
data = {
"sys": sys_info, "cpu": cpu, "ddr": ddr, "disk": disk, "net": net}
return data
データのフォーマット
関数を呼び出す
data = get_my_computer()
re = json.dumps(data)
print(data)
JSON 出力データ
{
'sys': {
'hostname': 'poleung-len', 'ip': '192.168.4.16', 'mac': '4c:79:6e:4f:ff:0f', 'user': 'poleung', 'start_time': '2023-01-24 08:18:44'}, 'cpu': {
'amount': 8, 'rate': '32.8%'}, 'ddr': {
'total': 15.79, 'free': 4.19, 'rate': '73.5%', 'used': 11.6}, 'disk': [{
'disk_name': 'C:\\', 'total': 200.0, 'used': 171.9, 'surplus': 28.1, 'rate': 86.0}, {
'disk_name': 'D:\\', 'total': 129.2, 'used': 105.2, 'surplus': 24.0, 'rate': 81.4}, {
'disk_name': 'E:\\', 'total': 146.5, 'used': 127.5, 'surplus': 18.9, 'rate': 87.1}], 'net': {
'bytes_sent': '927.60', 'bytes_rcvd': '2336.88'}}
要約する
コンピューター システム情報の読み取りには、psutil および socket モジュールが関係します。この記事では、使用される情報を別の関数にカプセル化し、JSON 出力を使用して、後の段階でデータを視覚化するための大画面 API の接続を容易にします。その後の開発作業には以下が含まれます。
- システムデータ情報ストレージ (pymysql モジュール)
- データのグラフィカル表示 (matplotlib、pyecharts モジュール)
- Web 側のデータの視覚化 (フラスコ モジュール)
- データのエクスポート (pandas モジュール)
@時々漏れる