たとえば、bashを使用してシステムCPU使用率を取得し、パーセンテージとして表示する方法を知りたいと思います。
出力例:
57%
複数のコアがある場合は、平均パーセントを計算できれば良いでしょう。
答え1
これは以下のために行われます。全体のCPU使用率を見る。これはpython3
クロスプラットフォームを呼び出して使用します。psutil
基準寸法。
printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
このinterval=2
セクションでは、2秒のブロッキング期間中に合計CPU負荷を測定する必要があることを示します。
出力例:
9.4%
ここに含まれるPythonプログラムは次のとおりです。
import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))
time
呼び出しの前に置くことは、この場合、約2秒の指定された間隔が必要であることを証明します。呼び出しと出力は次のとおりです。
$ time printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
9.5%
real 0m2.127s
user 0m0.119s
sys 0m0.008s
出力ビューそして別々のコア、このPythonプログラムを試してみましょう。まず、「CPUあたり」情報のPythonリスト(配列)を取得し、そのリストのすべての項目を平均して「合計CPU%」タイプの値を取得します。次に、全体と個々のコアの比率を印刷します。
Pythonプログラム:
import psutil
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)
cpu_percent_total_str = ('%.2f' % avg) + '%'
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]
print('Total: {}'.format(cpu_percent_total_str))
print('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))
必要に応じて、以下のように非常に見苦しい1行のbashスクリプトでラップできます。 bash 1-linerでラップするには、Pythonプログラムで二重引用符(''
)ではなく一重引用符()のみを使用する必要がありました。""
printf "%b" "import psutil\n\
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)\n\
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)\n\
cpu_percent_total_str = ('%.2f' % avg) + '%'\n\
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]\n\
print('Total: {}'.format(cpu_percent_total_str))\n\
print('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))\n\
" | python3
サンプル出力:コアが8個あるため、「個別CPU:」の後に8個の数字が続きます。
Total: 10.15%
Individual CPUs: 11.00% 8.50% 11.90% 8.50% 9.90% 7.60% 11.50% 12.30%
~のためpsutil.cpu_percent(interval=2)
Python呼び出しの仕組みの詳細、より公式psutil.cpu_percent(interval=None, percpu=False)
文書はこちら:
psutil.cpu_percent(interval=None, percpu=False)
現在のシステム全体のCPU使用率をパーセンテージで表す浮動小数点数を返します。時間間隔>の場合、
0.0
時間間隔の前後に経過したシステムCPU時間(ブロック)を比較します。間隔が最後の呼び出しまたはモジュールのインポートから経過したシステムCPU時間と等しいか、比較すると0.0
すぐに返されます。None
これは、最初に呼び出されたときに意味のない0.0
値を返すので、無視する必要があることを意味します。この場合、正確さのために、0.1
呼び出し間に少なくとも数秒の間隔を置いてこの関数を呼び出すことをお勧めします。 percpu が True の場合、各 CPU の使用率を示す浮動小数点数のリストを返します。リストの最初の要素は最初のCPUを参照し、2番目の要素は2番目のCPUを参照する方法です。リストの順序は呼び出し間で一貫しています。警告する:この関数を初めて呼び出すときは、間隔=を使用してください
0.0
。それ以外の場合は、無視する必要のある意味のない値None
が返されます。0.0