是否可以使用python测量几个代码语句之间的准确毫秒时间?

时间:2019-04-16 13:29:02

标签: python-2.7 delay pyserial milliseconds

我正在使用Python2.7开发python应用程序。 该应用程序正在使用pyserial库从串行端口读取一些数据字节。 在每次迭代中使用while循环读取1个字节的数据。在每次迭代中 我必须测量语句之间的执行时间(如果小于10毫秒),请等待其达到10毫秒,然后再开始下一次迭代。这里有两个问题,如下:

  1. 时间测量

测量python语句之间的时间达到毫秒级精度(可接受的1ms或2ms差异)的最佳方法是什么。

  1. 时间延迟

我如何使用测得的时间进行延迟,以便等到总时间为10ms(总时间= 10ms =代码执行时间+延迟)

我已经尝试过时间库,但是当毫秒级的时间内它没有给出任何结果时,它不能提供良好的分辨率。 例如:

import time
while uart.is_open:
uart.read() 
start = time.time()
#user code will go here

end = time.time()
execution_time=end - start
if execution_time< 10ms:
remaining_time = 10ms - execution_time
delay(remaining_time)

2 个答案:

答案 0 :(得分:0)

您可以使用datetime来获取分钟:秒:微秒的字符串,如下所示:

import datetime
string = datetime.datetime.now().strftime("%M:%S:%f")

然后将其转换为数字以使比较更方便:

m, s, u = string.split(":")
time_us = float(m)/60e6 + float(s)/1e6 + float(u)

在您的示例中,看起来像这样:

import datetime
def time_us_now():
    h, m, s, u = (float(string) for string in datetime.datetime.now().strftime("%H:%M:%S:%f").split(":"))
    return h/3600e6 + m/60e6 + s/1e6 + u

start = time_us_now()
# User code will go here.
end = time_us_now()
execution_time = end - start

答案 1 :(得分:0)

解决方案:

通过做两件事,我设法获得了高达1ms的分辨率。

  1. 将波特率从19200更改(提高)到115200。

  2. 使用time.clock()而不是time.time(),因为它具有更高的准确性和分辨率。