我正在使用Python2.7开发python应用程序。 该应用程序正在使用pyserial库从串行端口读取一些数据字节。 在每次迭代中使用while循环读取1个字节的数据。在每次迭代中 我必须测量语句之间的执行时间(如果小于10毫秒),请等待其达到10毫秒,然后再开始下一次迭代。这里有两个问题,如下:
测量python语句之间的时间达到毫秒级精度(可接受的1ms或2ms差异)的最佳方法是什么。
我如何使用测得的时间进行延迟,以便等到总时间为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)
答案 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的分辨率。
将波特率从19200更改(提高)到115200。
使用time.clock()而不是time.time(),因为它具有更高的准确性和分辨率。