python win32api cpu_关于winapi:win32上的python:如何获得绝对时间/ CPU周期数

我有一个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,

拉迪姆

你尝试过使用ctypes吗?

from ctypes import *

val = c_int64()

windll.Kernel32.QueryPerformanceCounter(byref(val))

print val.value

效果很好,我能够获得大约0.5ms的读数(与WMI相比为48ms)。 谢谢你,吕克。

这是上面的扩展,在Windows中使用Python的micros(),millis(),delay()和delayMicroseconds()函数:stackoverflow.com/questions/38319606/…。 感谢@luc提供了在Python中访问QueryPerformanceCounter的语法!

@luc,你应该使用val = c_uint64()而不是val = c_int64()吗?

或者可能不是??? 由于此(msdn.microsoft.com/en-us/library/windows/desktop/…)显示"QuadPart"是带符号的64位整数。

您可以直接从Python调用C#StopWatch类,不是吗? 可能需要一个小包装器(不知道Python / C#interop详细信息 - 抱歉) - 如果您已经使用C#进行数据采集,那么通过StopWatch执行相同的操作应该比您可以做的任何事情都简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值