python en win32: cómo obtener la sincronización absoluta / recuento de ciclos de CPU

Tengo una secuencia de comandos de Python que llama a un ejecutable C # dotnet de adquisición de datos basado en USB. El script principal de python hace muchas otras cosas, por ejemplo, controla un motor paso a paso. Nos gustaría verificar el tiempo relativo de varias operaciones, para eso el exe de dotnet genera un registro con marcas de tiempo de C # Stopwatch.GetTimestamp (), que hasta donde sé da el mismo número que las llamadas a win32 API QueryPerformanceCounter ().

Ahora me gustaría obtener números similares de la secuencia de comandos de python. time.clock () devuelve dichos valores, desafortunadamente, resta el valor obtenido en el momento de la primera llamada a time.clock (). ¿Cómo puedo evitar esto? ¿Es fácil llamar a QueryPerformanceCounter () desde algún módulo de python existente o tengo que escribir mi propia extensión de python en C?

Olvidé mencionar, el módulo WMI de Python por Tim Golden hace esto: wmi.WMI (). Win32_PerfRawData_PerfOS_System () [0] .Testestamp_PerfTime, pero es demasiado lento, algunos 48 ms por encima. Necesito algo con <= 1ms de sobrecarga. time.clock () parece ser lo suficientemente rápido, como lo es c # Stopwatch.GetTimestamp ().

TIA, Radim

¿Has intentado usar ctypes?

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

Podría simplemente llamar a la clase C # StopWatch directamente desde Python, ¿verdad? Tal vez se necesita un pequeño envoltorio (no sé los detalles de interoperabilidad de Python / C #, lo siento): si ya está utilizando C # para la adquisición de datos, hacer lo mismo para los tiempos a través del Stopwatch debería ser más simple que cualquier otra cosa que pueda hacer.