2016-08-24 17 views
1

多分私は何かを見落としているかもしれませんが、私はどのようにそれらを反復せずにすべてのプロセスのためにcurrent_process.cpu_percent(interval=0.1)を取得するかを理解できません。現在、反復処理にはprocess_count * interval秒かかります。これを回避する方法はありますか?psutil:すべてのプロセスのCPUを取得

これまでのところ、私がやっている:

#!/usr/bin/env python2 
import psutil 

cpu_count = psutil.cpu_count() 

processes_info = [] 
for proc in psutil.process_iter(): 
    try: 
     pinfo = proc.as_dict(attrs=['pid', 'username', 'memory_info', 'cpu_percent', 'name']) 

     current_process = psutil.Process(pid=pinfo['pid']) 

     pinfo["cpu_info"] = current_process.cpu_percent(interval=0.1) 
     processes_info.append(pinfo) 

    except psutil.NoSuchProcess: 
     pass 

print processes_info 

を限り、私はそれを理解して、私はattr -listにcpu-percentを含めることはできません、ヘルプ状態以来

間隔が0.0以上である場合にはNoneは、直前の呼び出しまたはモジュールのインポート以降に経過したシステムCPU時間を比較し、直ちに戻る。つまり、これが初めて呼び出されたときに、無視すると思われる無意味な0.0の値が返されます。

答えて

2

。 各プロセス/反復ごとに0.130秒を待つ必要はありません。 代わりに、すべてのプロセスを繰り返し、interval = 0でcpu_percent()を呼び出し、戻り値を無視してから0.1秒(またはそれ以上)待ってください。 2回目のプロセスですべてのプロセスを繰り返し実行すると、cpu_percent(interval = 0)は意味のある値を返します。

+0

このソリューションは、並列測定のように機能するようです。この解決策は 'process_count * interval'から' interval'までの時間を短縮します。 –

1

これは、各プロセスのCPU時間を測定する種類なので、1つのPythonインタプリタプロセスでprocess_count * interval秒を避けることはできません。たぶん、あなたはマルチプロセッシングによって時間を短縮することができます。あなたは、必ずしも待たなければならないCPUの%を計算するために

https://docs.python.org/3/library/multiprocessing.html

関連する問題