2

たぶん私は何かを見落としているかもしれませんがcurrent_process.cpu_percent(interval=0.1)、すべてのプロセスを一度に反復処理せずに取得する方法がわかりません。現在、反復処理がprocess_count * interval完了するまでに数秒かかります。これを回避する方法はありますか?

これまでのところ、私はやっています:

#!/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

私が理解している限り、ヘルプに記載cpu-percentされているため、リストに含めることはできませんattr

interval が 0.0 または None の場合、最後の呼び出しまたはモジュールのインポートから経過したシステム CPU 時間を比較し、すぐに戻ります。これは、これが最初に呼び出されたときに意味のない 0.0 値を返すことを意味しますが、無視する必要があります。

4

2 に答える 2

5

CPU% を計算するには、必然的に待機する必要があります。ただし、プロセス/反復ごとに0.1 秒待つ必要はありません。代わりに、すべてのプロセスを繰り返し、間隔 = 0 で cpu_percent() を呼び出し、戻り値を無視してから 0.1 秒 (またはそれ以上) 待ちます。2 回目にすべてのプロセスを反復すると、cpu_percent(interval=0) は意味のある値を返します。

于 2016-08-25T07:12:41.463 に答える
1

process_count * intervalこれは、各プロセスの CPU 時間を測定するようなものなので、単一の Python インタープリター プロセスで数秒を避けることはできません。おそらく、マルチプロセッシングによって時間を短縮できます。

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

于 2016-08-24T10:45:28.403 に答える