これが私がここで尋ねた最初の質問だと思います通常、私が必要とするすべての答えを見つけます(事前に感謝します)
私の問題は、スレッドでプロセスを監視し、後で使用するために結果をcsvファイルに出力するPythonプログラムを作成したことです。このコードはうまく機能しています。カウンターにはwin32pdhutilを使用し、CPU%timeにはWMI、Win32_PerfRawData_PerfProc_Processを使用しています。WPFアプリケーションを監視し、特にユーザーオブジェクトとGDIオブジェクトを監視するように求められました。
これは私が問題を抱えているところです、それは私がこれらの2つのカウンターでメトリックを収集するためのPythonサポートを見つけることができないように見えるということです。これらの2つのカウンターは、タスクマネージャーで簡単に利用できます。これらの2つのカウンターに関する情報がほとんどないのは奇妙なことです。私は特にメモリリークがあるかどうかを確認するためにこれらを収集することを検討しています。すでにインストールされているPython以外のものをシステムにインストールしたくありません。解決策を見つけるのに役立つ情報を覗いてください。
私はPython3.3.1を使用しています。これは、Windowsプラットフォーム(主にwin7とwin8)で実行されます。これは、データを収集するために使用しているコードです。
def gatherIt(self,whoIt,whatIt,type,wiggle,process_info2):
#this is the data gathering function thing
data=0.0
data1="wobble"
if type=="counter":
#gather data according to the attibutes
try:
data = win32pdhutil.FindPerformanceAttributesByName(whoIt, counter=whatIt)
except:
#a problem occoured with process not being there not being there....
data1="N/A"
elif type=="cpu":
try:
process_info={}#used in the gather CPU bassed on service
for x in range(2):
for procP in wiggle.Win32_PerfRawData_PerfProc_Process(name=whoIt):
n1 = int(procP.PercentProcessorTime)
d1 = int(procP.Timestamp_Sys100NS)
#need to get the process id to change per cpu look...
n0, d0 = process_info.get (whoIt, (0, 0))
try:
percent_processor_time = (float (n1 - n0) / float (d1 - d0)) *100.0
#print whoIt, percent_processor_time
except ZeroDivisionError:
percent_processor_time = 0.0
# pass back the n0 and d0
process_info[whoIt] = (n1, d1)
#end for loop (this should take into account multiple cpu's)
# end for range to allow for a current cpu time rather that cpu percent over sampleint
if percent_processor_time==0.0:
data=0.0
else:
data=percent_processor_time
except:
data1="N/A"
else:
#we have done something wrong so data =0
data1="N/A"
#endif
if data == "[]":
data=0.0
data1="N/A"
if data == "" :
data=0.0
data1="N/A"
if data == " ":
data=0.0
data1="N/A"
if data1!="wobble" and data==0.0:
#we have not got the result we were expecting so add a n/a
data=data1
return data
乾杯
誰かがそれを実行しようとした場合、正しいCPUタイミングの問題のために編集されました:D