Python на Win32: как получить абсолютное время / количество циклов процессора - PullRequest
4 голосов
/ 13 декабря 2010

У меня есть скрипт на python, который вызывает исполняемый файл C # dotnet для сбора данных на основе USB. Основной скрипт Python делает много других вещей, например, он управляет шаговым двигателем. Мы хотели бы проверить относительную синхронизацию различных операций, для этого exe-файл dotnet генерирует журнал с метками времени из C # Stopwatch.GetTimestamp (), который, насколько мне известно, дает то же число, что и вызовы Win32 API QueryPerformanceCounter ().

Теперь я хотел бы получить аналогичные числа из скрипта Python. time.clock () возвращает такие значения, к сожалению, вычитает значение, полученное во время первого вызова time.clock (). Как я могу обойти это? Легко ли вызвать QueryPerformanceCounter () из какого-либо существующего модуля Python или мне нужно написать собственное расширение Python на C?

Я забыл упомянуть, модуль Python WMI Тимом Голденом делает это: wmi.WMI (). Win32_PerfRawData_PerfOS_System () [0] .Timestamp_PerfTime , но это слишком медленно, около 48 мс. Мне нужно что-то с <= 1 мс. time.clock () кажется достаточно быстрым, как и c # Stopwatch.GetTimestamp (). </p>

ТИА, Радим

Ответы [ 2 ]

8 голосов
/ 13 декабря 2010

Вы пробовали использовать ctypes?

from ctypes import *
val = c_int64()
windll.Kernel32.QueryPerformanceCounter(byref(val))
print val.value
0 голосов
/ 13 декабря 2010

Вы могли бы просто вызвать класс C # StopWatch напрямую из Python, не так ли?Может быть, нужна небольшая оболочка (не знаю деталей взаимодействия Python / C # - извините) - если вы уже используете C # для сбора данных, сделать то же самое для времени через Stopwatch должно быть проще, чем все, что вы можете сделать.1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...