在win32上用python获取绝对时间/CPU周期计数的方法
我有一个Python脚本,它会调用一个基于USB的数据采集的C#程序。这个主要的Python脚本还做很多其他事情,比如控制步进电机。我们想要检查各种操作之间的相对时间,为此,C#程序会生成一个带有时间戳的日志,这个时间戳是通过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 ,但它太慢了,大约有48毫秒的延迟。我需要的是延迟小于等于1毫秒的东西。time.clock()似乎足够快,就像C#的Stopwatch.GetTimestamp()一样。
谢谢,
Radim
2 个回答
0
你可以直接在Python中调用C#的StopWatch
类,对吧?可能需要一个小的包装器(我对Python和C#之间的互操作细节不太了解,抱歉)——如果你已经在用C#来获取数据,那么用Stopwatch
来计时应该比其他任何方法都简单。
8
你试过用ctypes这个库吗?
from ctypes import *
val = c_int64()
windll.Kernel32.QueryPerformanceCounter(byref(val))
print val.value