現在の Python アプリが使用しているプロセッサの使用量 (最大の %) を確認することはできますか?
シナリオ: 私のホストは、CPU パワーの X% を超えて消費しない限り、アプリを実行することを許可してくれるので、「自分自身を監視」してスローダウンさせたいと考えています。では、アプリが使用している CPU の量を知るにはどうすればよいでしょうか?
ターゲット プラットフォームは *nix ですが、Win ホストでも実行したいと考えています。
現在の Python アプリが使用しているプロセッサの使用量 (最大の %) を確認することはできますか?
シナリオ: 私のホストは、CPU パワーの X% を超えて消費しない限り、アプリを実行することを許可してくれるので、「自分自身を監視」してスローダウンさせたいと考えています。では、アプリが使用している CPU の量を知るにはどうすればよいでしょうか?
ターゲット プラットフォームは *nix ですが、Win ホストでも実行したいと考えています。
>>> import os
>>> os.times()
(1.296875, 0.765625, 0.0, 0.0, 0.0)
>>> print os.times.__doc__
times() -> (utime, stime, cutime, cstime, elapsed_time)
Return a tuple of floating point numbers indicating process times.
(2.5)マニュアルから:
回( )
累積された (プロセッサまたはその他の) 時間を秒単位で示す浮動小数点数の 5 タプルを返します。項目は、ユーザー時間、システム時間、子供のユーザー時間、子供のシステム時間、過去のある時点からの経過リアルタイムの順です。Unix マニュアルのページ times(2) または対応する Windows プラットフォーム API ドキュメントを参照してください。可用性: Macintosh、Unix、Windows。
psutilを使用して:
>>> import psutil
>>> p = psutil.Process()
>>> p.cpu_times()
cputimes(user=0.06, system=0.03)
>>> p.cpu_percent(interval=1)
0.0
>>>
このresource
モジュールはgetrusage
、少なくとも Unix ライクなプラットフォームで必要な情報を提供します。
パーセンテージとしての CPU 使用率は、常に一定の時間間隔で測定されることに注意してください。基本的に、これはプログラムが何かを実行するのにかかった時間をインターバル時間で割ったものです。
たとえば、アプリケーションが 5 秒間に 2 秒間の CPU 時間を使用している場合、CPU の 40% を使用していると言えます。
この計算は一見単純に見えますが、マルチプロセッサ システムを使用すると複雑になる可能性があることに注意してください。アプリケーションが 2 プロセッサ システムで 5 秒の壁時計時間に対して 7 秒の CPU 時間を使用する場合、140% または 70% の CPU を使用していると言えますか?
更新: gimelが言及しているように、このos.times
関数はプラットフォームに依存しない方法でこの情報も提供します。もちろん、上記の計算上の注意事項は引き続き適用されます。
time.clock()
CPU 時間を取得するために使用します。CPU 使用率を取得するには、CPU 経過時間/経過時間を実行します。
たとえば、経過した CPU 時間が 0.2 で経過時間が 1 の場合、CPU 使用率は 20% です。
注: 所有しているプロセッサの数で割る必要があります。2つ、つまりデュアルコアがある場合:
import decimal,timeit
decimal.getcontext().prec=1000
def torture():
decimal.Decimal(2).sqrt()
time.sleep(0.1)
import time
clock=time.clock()
while 1:
clock=timeit.timeit(torture,number=10)
tclock=time.clock()
print((tclock-clock)*p)
clock=tclock