1. psutil の紹介
psutil (Python System and Process Utilities) は、Python で実行中のプロセスとシステム使用率 (CPU、メモリ、ディスク、ネットワーク、センサー) に関する情報を取得するためのクロスプラットフォーム ライブラリです。主に、システムの監視、分析、プロセス リソースの制限、および実行中のプロセスの管理に使用されます。ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap など、UNIX コマンド ライン ツールによって提供される多くの機能を実装しています。psutil は現在、Linux、Windows、macOS、FreeBSD/penBSD/NetBSD、Sun Solaris、AIX、およびその他のプラットフォームをサポートしています。
psutil でサポートされている Python のバージョンは 2.7 および 3.4+ です。Linux、Windows、および macOS でのダウンロード方法は次のとおりです。
pip install psutil
次に、CPU、メモリ、ディスク、ネットワークなどに関する機能や API を整理します。
2. システム関連機能
2.1 CPU
CPU 関連の機能:
関数名 |
関数 |
その他の指示 |
|
システムの CPU 時間を名前付きタプルとして返します |
percpu が True の場合、システム上の各論理 CPU の名前付きタプルのリストを返します。リストの最初の要素は最初の CPU を指し、2 番目の要素は 2 番目の CPU を指し、以下同様です。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
デモを使用: (現在のテスト プラットフォーム --- Windows)
import psutil
# scputimes(user=2240.359305, system=2669.05, idle=20536.234305, interrupt=174.21805, dpc=443.953125)
print(psutil.cpu_times())
# 0.0
print(psutil.cpu_percent())
# scputimes(user=0.0, system=0.0, idle=0.0, interrupt=0.0, dpc=0.0)
print(psutil.cpu_times_percent())
# scpustats(ctx_switches=82697106, interrupts=58590008, soft_interrupts=0, syscalls=331427222)
print(psutil.cpu_stats())
# 8
print(psutil.cpu_count())
# scpufreq(current=1792.0, min=0.0, max=1992.0)
print(psutil.cpu_freq())
# (0.0, 0.0, 0.0)
print(psutil.getloadavg())
ここから、CPU 構成情報は、8 コア、最大 CPU 周波数は 1992MHZ、現在の周波数は 1792MHZ などであることがわかります。
2.2 メモリ
メモリは、仮想メモリとスワップ メモリに分割でき、次の 2 つの機能があります。
①, virtual_memory() : 名前付きタプルの形式でシステム メモリ使用量 (バイト単位) に関する統計を返します. 主な指標は次のとおりです:
- total: 物理メモリの合計 (排他的スワップ)。
- available: 利用可能なメモリ。
- used: 使用済みメモリ。
- free: 空きメモリ。
- active (UNIX): 現在使用中または最近使用されたメモリ。
- 非アクティブ (UNIX): 未使用としてマークされたメモリ。
- buffers (Linux、BSD): ファイル システム メタデータなどのバッファ。
- cached (Linux、BSD): さまざまなコンテンツをキャッシュします。
- 共有 (Linux、BSD): 複数のプロセスが同時にアクセスできるメモリ。
- slab (Linux): カーネル データ構造キャッシュ内。
- 有線 (BSD、macOS): 常に RAM に残るようにマークされたメモリ。ディスクに移動されることはありません。
# 当前测试平台,Windows
# svmem(total=8434085888, available=1996607488, percent=76.3, used=6437478400, free=1996607488)
print(psutil.virtual_memory())
②, swap_memory() : 次のフィールドを含む、システム スワップ メモリ統計を名前付きタプル (バイト単位) として返します。
- total: 交換メモリの合計。
- used: 使用済みのスワップ メモリ。
- free: 使用可能なスワップ メモリ。
- パーセント: (使用可能な合計)/合計 * 100 として計算される使用率。
- sin: システムがディスクからスワップしたバイト数 (累積)。
- sout: システムがディスクからスワップしたバイト数 (累積)。
# 当前测试平台,Windows
# sswap(total=15144972288, used=8803577856, free=6341394432, percent=58.1, sin=0, sout=0)
print(psutil.swap_memory())
2.3 ディスク
--> disk_partitions(): デバイス、マウント ポイント、ファイル システム タイプなどを含む、マウントされたすべてのディスク パーティション情報を名前付きタプルの形式で返します。Linux プラットフォームを使用している場合は、同様に df コマンドを使用します。
--> disk_usage(path): 指定されたパスを名前付きタプルとして含むパーティションに関するディスク使用統計を返します。これには、総容量 (バイト単位)、使用済みおよび空き容量、使用率が含まれます。
--> disk_io_counters(): システム全体のディスク I/O 統計 (read_count、write_count、read_bytes、write_bytes、read_time、write_time およびその他のフィールドを含む) を名前付きタプルの形式で返します。
# 当前测试平台,Windows
# [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260)]
print(psutil.disk_partitions())
# sdiskusage(total=161051269304, used=48602433888, free=112459735616, percent=31.2)
print(psutil.disk_usage("/"))
# sdiskio(read_count=800572, write_count=166800, read_bytes=26395607296, write_bytes=7520133392, read_time=814, write_time=97)
print(psutil.disk_io_counters())
2.4 ネットワーク
--> net_io_counters(): システム全体のネットワーク I/O 統計を名前付きタプルの形式で返します。
--> net_connections(): システム全体のソケット接続を名前付きタプルのリストとして返します。
# 当前测试平台,Windows
#snetio(bytes_sent=1665035507, bytes_recv=16602087092, packets_sent=11453498, packets_recv=14149630, errin=0, errout=0, dropin=0, dropout=0)
print(psutil.net_io_counters())
#[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='0.0.0.0', port=49685), raddr=(), status='LISTEN', pid=4404)]
print(psutil.net_connections())
--> net_if_addrs(): システムにインストールされている各ネットワーク ポートに関連付けられたアドレス情報を辞書形式で返します。
--> net_if_stats(): システムにインストールされている各ネットワーク ポートの情報をディクショナリの形式で返します (isup-ネットワーク ポートが起動して正常に動作しているかどうか、二重-二重通信タイプ、速度-伝送速度、mtu -最大伝送バイト数、フラグ - ネットワーク ポートのフラグ)。
# 当前测试平台,Windows
#{'本地连接* 3': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='82-91-33-91-F1-BD', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.163.103', netmask='255.255.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::aa55:ee0f:3f9e:e5f0', netmask=None, broadcast=None, ptp=None)]}
print(psutil.net_if_addrs())
#{'本地连接* 3': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)}
print(psutil.net_if_stats())
2.5 プロセス
--> pids(): 現在実行中の pid のリストを (順序付けて) 返します。
--> process_iter(): ローカル コンピューターで実行中のすべてのプロセスの Process クラス インスタンスを生成する反復子を返します。これは、競合状態の影響を受けないため、プロセスを反復するための pids() メソッドよりも優先されます。
--> pid_exists(pid): 指定された pid が現在実行中の pid のリストに存在するかどうかを調べます。
2.6 その他のシステム情報
--> users(): 現在システムに接続しているユーザーを名前付きタプルとして返します。
--> boot_time(): エポックからのシステム起動時間 (秒単位) を返します。
3. まとめ
上記はこのモジュールのほとんどの API であり、そのうちのいくつかは非常に実用的であるため、ここに記録してください。
参考文献: