【Pythonモジュール】psutil

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_times( percpu=False )

システムの CPU 時間を名前付きタプルとして返します

percpu が True の場合、システム上の各論理 CPU の名前付きタプルのリストを返します。リストの最初の要素は最初の CPU を指し、2 番目の要素は 2 番目の CPU を指し、以下同様です。

cpu_percent(interval=None, percpu=False)

返回表示当前系统范围内CPU利用率百分比的浮点值。

当间隔>0.0时,比较间隔前后经过的系统CPU时间(阻塞)。当interval为0.0或None时,比较自上次调用或模块导入以来经过的系统CPU时间,并立即返回。

cpu_times_percent(interval=None, percpu=False)

与cpu_percent()相同,但提供psutil.cpu_times(percpu=True)返回的每个特定cpu时间的利用率百分比。

interval和percpu参数的含义与cpu_percent()中的含义相同。

cpu_count(logical=True)

返回系统中逻辑cpu的数量(与Python 3.4中的os.cpu_count相同),如果不确定,则返回None。

“逻辑CPU”是指物理内核数乘以每个内核上可以运行的线程数(这称为“超线程”)。如果逻辑值为False,则仅返回物理内核的数量,如果未确定,则返回None。

cpu_stats()

以命名元组的形式返回各种CPU统计信息

ctx_switches:自启动以来上下文开关的数量。

interrupts:自启动以来中断数。

soft_interrupts:自启动以来软件中断数。

syscalls:自启动以来系统调用数。在Linux上始终设置为0。

cpu_freq(percpu=False)

以命名元组形式返回CPU频率,包括以Mhz表示的当前、最小和最大频率

如果percpu为True,并且系统支持每cpu频率检索(仅限Linux),则为每个cpu返回一个频率列表,如果不是,则返回一个包含单个元素的列表。如果无法确定最小值和最大值,则将其设置为0.0。

getloadavg()

以元组形式返回过去1、5和15分钟内的平均系统负载。

“负载”表示处于可运行状态的进程,使用CPU或等待使用CPU(例如等待磁盘I/O)。在UNIX系统上,这依赖于os.getloadavg。在Windows上,这是通过使用Windows API来模拟的,该API生成一个线程,该线程保持在后台运行,每5秒更新一次结果,模拟UNIX行为。因此,在Windows上,第一次调用它时,在接下来的5秒内,它将返回一个无意义的(0.0,0.0,0.0)元组。

デモを使用: (現在のテスト プラットフォーム --- 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 であり、そのうちのいくつかは非常に実用的であるため、ここに記録してください。

参考文献:

psutil ドキュメント — psutil 5.9.5 ドキュメント

おすすめ

転載: blog.csdn.net/qq_29119581/article/details/128180387