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

时间:2015-02-07 17:41:53

标签: python time

我编写了一个系统,用于在arduino nano和我的python脚本之间交换crc-checked结构数据。这工作得很好,但是当我让系统运行时,我的python监视器上会出现意外的输出(使用pycharm)

print“Took”,(time.time() - timeout),“s”有时打印出0.0秒。 通常打印Took 0.0160000324249 s。 使用win7-64bit专业版。

从时间doc:返回自纪元以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒。

我正在寻找像millis()这样的东西,足够精确到我的情况

Code 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"
       ....

1 个答案:

答案 0 :(得分:1)

摘要:使用timeit.default_timer()代替time.time()来衡量持续时间。


time.time()的16ms错误在Windows上并不令人惊讶。

目前,Python使用GetSystemTimeAsFileTime()在Windows上实现time.time(),其分辨率(精度)为0.1ms(而不是ftime()的1ms),准确性为在0.5毫秒到15毫秒之间(您可以使用NtSetTimerResolution()在系统范围内更改它)。请参阅Python错误:Use GetSystemTimeAsFileTime() to get a resolution of 100 ns on Windows和另一个SO问题:How does python's time.time() method work?

在Windows上测量短时间间隔的更好选择是使用在Windows上使用time.clock()实现的QueryPerformanceCounter()。为了便于移植,您可以使用在Windows上分配给time.clock()的{​​{3}},在其他系统上分配time.time(),从Python3.3开始为timeit.default_timer。见time.perf_counter()