iMind Developers Blog

iMind開発者ブログ

Pythonのpsutilでハードウェアの情報を取得する

概要

psutilでCPUのコア数、ディスクの空き容量、メモリの使用量等、ハードウェアの情報を取得する。

バージョン情報

  • Python 3.6.8
  • psutil==4.4.2
  • Ubuntu 18.04.1

インストール

$ pip install psutil

CPUのコア数

import psutil
psutil.cpu_count()
  => 8

上記は4コア8スレッドのCPUで実行した場合。

CPUの論理コア数

デフォルトでは引数 logical=True が指定されている。Falseを指定すると論理コアは含まれず物理コアのみのカウントが取れる。

import psutil
psutil.cpu_count(logical=False)
  => 4

CPU使用率

計測は1つのコアを使い切るような処理を後ろで走らせてから実行している。

CPUの使用率を計測する。

psutil.cpu_percent()
    #=> 13.2

8コアで1コア使い切っているので、100/8 = 12.5に近い値が結果として出ている。

引数に interval=n を指定するとn秒間のcpu timeの差を計測して使用率を出す。

psutil.cpu_percent(interval=1)
    #=> 12.5

コアごとの使用率を出す。

psutil.cpu_percent(interval=1, percpu=True)
    #=> [0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 100.0, 0.0]

メモリの容量

32GBのPCの場合。

psutil.virtual_memory().total
    => 33601126400

メモリの空き容量

psutil.virtual_memory().available
    => 23216951296

メモリの使用量

使用量

psutil.virtual_memory().used
    => 9523564544

使用率

psutil.virtual_memory().percent
    => 30.9

スワップメモリ

スワップメモリ領域

psutil.swap_memory().total
    #=> 1027600384

使用量

psutil.swap_memory().used
    #=> 0

空き容量

psutil.swap_memory().free
    #=> 0

ディスクパーティション

psutil.disk_partitions()

実行結果

[
    sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,relatime,errors=remount-ro,data=ordered'),
    sdiskpart(device='/dev/sda2', mountpoint='/boot', fstype='ext4', opts='rw,relatime,data=ordered'),
    opts='rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro')
]

ディスク容量

/ にmountされているディスクの容量。500GBの場合。

psutil.disk_usage(path='/').total
    #=> 500695072768

ディスク使用量

使用量

psutil.disk_usage(path='/').used
    #=> 202363543552

使用率

psutil.disk_usage(path='/').percent
    #=> 42.6

空き容量

psutil.disk_usage(path='/').free
    #=> 272826175488

ネットワークインターフェース

loのネットワークを確認してみる

psutil.net_if_addrs()['lo']

実行結果

[
    snic(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None),
    snic(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
    snic(family=<AddressFamily.AF_PACKET: 17>, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)
]

CPU温度

※ 以降はバージョンを上げて psutil==5.5.0 を利用。4系ではCPU温度等のsensor系機能は未実装。

psutil.sensors_temperatures()['coretemp']

実行結果

[shwtemp(label='Package id 0', current=44.0, high=100.0, critical=100.0),
 shwtemp(label='Core 0', current=44.0, high=100.0, critical=100.0),
 shwtemp(label='Core 1', current=43.0, high=100.0, critical=100.0),
 shwtemp(label='Core 2', current=43.0, high=100.0, critical=100.0),
 shwtemp(label='Core 3', current=43.0, high=100.0, critical=100.0)]

43〜44度になっている。

バッテリー使用率

手持ちのノートパソコンで計測。

psutil.sensors_battery().percent
    #=> 87.56626506024097

改定履歴

Author: Masato Watanabe, Date: 2019-03-11, 記事投稿