1

Pythonスクリプト内で外部プログラムのメモリ使用量を取得しようとしています。次のようにスクリプトhttp://code.activestate.com/recipes/286222/を使用してみました。

m0 = memory()
subprocess.call('My program')
m1 = memory(m0)
print m1

しかし、これは「私のプログラム」ではなく、Pythonスクリプトのメモリ使用量を私に与えているようです。Pythonスクリプト内で使用するためにプログラムのメモリ使用量を出力する方法はありますか?

4

4 に答える 4

7

Psutilを使用してみてください

import psutil
import subprocess
import time

SLICE_IN_SECONDS = 1
p = subprocess.Popen('calling/your/program')
resultTable = []
while p.poll() == None:
  resultTable.append(psutil.get_memory_info(p.pid))
  time.sleep(SLICE_IN_SECONDS)
于 2012-09-04T14:02:53.407 に答える
1

psutilモジュールを確認することをお勧めします:http ://code.google.com/p/psutil/ 。ホームページの「プロセス管理」セクションには、pidで指定された実行中のプロセスのメモリ使用量を取得する例が示されています。

スクリプトで監視しているプロセスも生成しますか?その場合、subprocess.callを使用したくない場合があります。これは、プログラムが終了するのを待機し、実行中はプログラムを監視できないためです。プロセスを生成して監視する場合は、Popenhttp://docs.python.org/library/subprocess.html#subprocess.Popenを使用することをお勧めします。これにより、プロセスを生成し、pidを取得し、pidをpsutilに渡して、メモリ使用量を監視できます。

于 2012-09-04T13:09:44.703 に答える
1

レシピを見ると、次の行が表示されます。

_proc_status = '/proc/%d/status' % os.getpid()

os.getpid()を子プロセスのプロセスIDに置き換えることをお勧めします。@Nealが言ったように、これを入力しているときに、返されたオブジェクトの属性 を使用Popenして取得する必要があります。pid

ただし、子プロセスがどの状態にあるかわからないため、競合状態が発生する可能性があり、メモリ使用量はとにかく変化します。

于 2012-09-04T13:13:29.177 に答える
1

私はこれが古い投稿であることを知っていますが、私がこの問題をグーグルで検索したときに表示されるのはそれだけなので、これの更新されたバージョンを追加したいと思います:

import psutil
import humanfriendly

proc = subprocess.Popen("...Your process...")
SLICE_IN_SECONDS = 1
while proc.poll() is None:
    p = psutil.Process(proc.pid)
    mem_status = "RSS {},  VMS: {}".format(humanfriendly.format_size(p.memory_info().rss),
                humanfriendly.format_size(p.memory_info().vms))
    time.sleep(SLICE_IN_SECONDS)
    print(mem_status)

ここでは、値を読みやすくするために人間に優しいものを使用しましたが、必須ではありません。

RSSとVMSの値はすべてのOSにあり、使用しているOSによっては、他の値が存在する場合があります:https ://psutil.readthedocs.io/en/latest/#psutil.Process.memory_info

于 2018-01-04T21:52:05.893 に答える