python - time.clock()/time() 的问题

python - issues with time.clock()/time()

我编写了一个系统来在 arduino nano 和我的 python 脚本之间交换经过 crc 检查的结构数据。这工作得很好但是当我让系统 运行 我在我的 python 监视器上得到意外输出(使用 pycharm)

print "Took ", (time.time() - 超时), "s" 有时会打印出 Took 0.0 s。 通常它会打印 Took 0.0160000324249 s。 使用win7-64位专业版。

From time doc : Return 自纪元以来的时间(以秒为单位)作为浮点数。请注意,即使时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更精确的时间。

我正在寻找像 millis() 这样的东西,这对我的情况来说已经足够精确了

代码Python:

import serial
import time
import binascii
import struct
from ctypes import *    

arduino = serial.Serial()
def receive_struct2():
  start = 0x85
  detected_start = False
  arduino.baudrate = 57600
  arduino.timeout = 0
  arduino.port = 'COM8'
  try:
    arduino.open()
  except serial.SerialException, e:
    print e

  while True:
     if(arduino.inWaiting() >= 1 and detected_start == False):
        data = ord(arduino.read())
        if data == start:
          print "Detected begin"
          detected_start = True
        else: print chr(data),

     if arduino.inWaiting() >= 1 and detected_start == True:
       message_length = ord(arduino.read())
       #print "Got message length ", message_length
       timeout = time.time()
       while time.time() - timeout <= 0.3 and arduino.inWaiting() <  message_length-1:pass
       print "Took ", (time.time() - timeout), " s"
       ....

总结:使用timeit.default_timer()而不是time.time()来测量短持续时间。


time.time() 的 16 毫秒错误在 Windows 上不足为奇。

目前,Python 使用 GetSystemTimeAsFileTime() 在 Windows 上实现 time.time(),分辨率(精度)为 0.1 毫秒(而不是 ftime()' s 1ms),精度在 0.5 ms 到 15 ms 之间(您可以使用 NtSetTimerResolution() 在系统范围内更改它)。请参阅 Python 错误:Use GetSystemTimeAsFileTime() to get a resolution of 100 ns on Windows and another SO question:

在 Windows 上测量短时间间隔的更好替代方法是使用 time.clock(),它是在 Windows 上使用 QueryPerformanceCounter() 实现的。为了便于携带,您可以使用 timeit.default_timer that is assigned to time.clock() on Windows, time.time() on other systems, and it is time.perf_counter() since Python3.3. See Python - time.clock() vs. time.time() - accuracy?