我有一个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] .Timestamp_PerfTime ,但它太慢了,开销大约48ms。我需要一些< = 1ms的开销。 time.clock()似乎足够快,就像c#Stopwatch.GetTimestamp()。
TIA, 的Radim
答案 0 :(得分:8)
您是否尝试过使用ctypes?
from ctypes import *
val = c_int64()
windll.Kernel32.QueryPerformanceCounter(byref(val))
print val.value
答案 1 :(得分:0)
您可以直接从Python调用C#StopWatch
类,不是吗?可能需要一个小包装器(不知道Python / C#interop详细信息 - 抱歉) - 如果您已经使用C#进行数据采集,那么通过Stopwatch
执行相同的操作应该比您可以做的任何事情都简单