win32上的python:如何获得绝对计时/CPU周期计数

win32上的python:如何获得绝对计时/CPU周期计数,python,winapi,api,performancecounter,Python,Winapi,Api,Performancecounter,我有一个python脚本,它调用基于USB的数据采集C#dotnet可执行文件。python主脚本执行许多其他操作,例如,它控制步进电机。我们想检查各种操作的相对计时,为此,dotnet exe从C#Stopwatch.GetTimestamp()生成一个带有时间戳的日志,据我所知,该日志生成的数字与对win32 API QueryPerformanceCounter()的调用数相同 现在我想从python脚本中得到类似的数字。time.clock()返回这样的值,不幸的是它减去了第一次调用ti

我有一个python脚本,它调用基于USB的数据采集C#dotnet可执行文件。python主脚本执行许多其他操作,例如,它控制步进电机。我们想检查各种操作的相对计时,为此,dotnet exe从C#Stopwatch.GetTimestamp()生成一个带有时间戳的日志,据我所知,该日志生成的数字与对win32 API QueryPerformanceCounter()的调用数相同

现在我想从python脚本中得到类似的数字。time.clock()返回这样的值,不幸的是它减去了第一次调用time.clock()时获得的值。我怎样才能避开这件事?从一些现有的python模块调用QueryPerformanceCounter()容易吗?还是我必须用C编写自己的python扩展

我忘了提到,Tim Golden的python WMI模块实现了以下功能: wmi.wmi().Win32_PerfRawData_PerfOS_System()[0]。时间戳_PerfTime
,但速度太慢,开销约为48毫秒。我需要一些关于的东西,你可以直接从Python调用C#
StopWatch
类,不是吗?可能需要一个小包装器(不知道Python/C互操作详细信息-抱歉)-如果您已经在使用C进行数据采集,那么通过秒表对计时进行同样的操作应该比其他任何操作都简单。

您尝试过使用ctypes吗

from ctypes import *
val = c_int64()
windll.Kernel32.QueryPerformanceCounter(byref(val))
print val.value

工作正常,我能够获得相隔约0.5毫秒的读数(与WMI的48毫秒相比)。谢谢你,Luc。这是上面的扩展,在Windows中为Python提供了micros()、millis()、delay()和delayMicroseconds()函数:。感谢@luc提供Python中访问QueryPerformanceCounter的语法@luc,您应该使用
val=c_uint64()
而不是
val=c_int64()
?还是不使用???因为这个()表示“四分位”是一个有符号的64位整数。