Мне нужно связаться со встроенной системой через RS232. Для этого я хочу профилировать время, необходимое для отправки ответа на каждую команду.Профилирование Последовательная связь с использованием timeit
Я тестировал этот код, используя два метода: datetime.now()
и timeit()
Метод # 1
def resp_time(n,msg):
"""Given number of tries - n and bytearray list"""
msg = bytearray(msg)
cnt = 0
timer = 0
while cnt < n:
time.sleep(INTERVAL)
a = datetime.datetime.now()
ser.flush()
ser.write(msg)
line = []
for count in ser.read():
line.append(count)
if count == '\xFF':
# print line
break
b = datetime.datetime.now()
c = b-a
# print c.total_seconds()*1000
timer = timer + c.total_seconds()*1000
cnt = cnt + 1
return timer/n
ser = serial.Serial(COMPORT,BAUDRATE,serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, timeout=16)
if ser.isOpen():
print "Serial port opened at: Baud:",COMPORT,BAUDRATE
cmd = read_file()
# returns a list of commands [msg1,msg2....]
n = 100
for index in cmd:
timer = resp_time(n,index)
print "Time in msecs over %d runs: %f " % (n,timer)
Способ № 2
def com_loop(msg):
msg = bytearray(msg)
time.sleep(INTERVAL)
ser.flush()
ser.write(msg)
line = []
for count in ser.read():
line.append(count)
if count == '\xFF':
break
if __name__ == '__main__':
import timeit
ser = serial.Serial(COMPORT,BAUDRATE,serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, timeout=16)
if ser.isOpen():
print "Serial port opened at: Baud:",COMPORT,BAUDRATE
cmd = read_file()
# returns a list of commands [msg1,msg2....]
n = 100
for index in cmd:
t = timeit.timeit("com_loop(index)","from __main__ import com_loop;index=%s;" % index,number = n)
print t/100
С DateTime я 2 миллисекунды для выполнения команды & с timeit Я получаю 200 миллисекунд за ту же команду.
Я подозреваю, что я не звоню timeit()
должным образом, может ли кто-нибудь указать мне в правильном направлении?
Да, теоретически это должно быть около 200 мкс (115200,8N1). Однако ответ отправляется после того, как встроенное ядро выполняет команду, поэтому я думаю, что это может быть немного выше. Python был самым быстрым в реализации, поэтому выбор. Я был бы счастлив, если бы смог получить правильный порядок времени. –
, так что если отправка только занимает 200 мкс, довольно очевидно, что оба результата неверны. Я действительно рекомендую логический анализатор или, по крайней мере, цифровой осциллограф, смотрящий на линию RX –