2016-04-25 6 views
0

Я использую time.sleep(0.01..), чтобы получить задержки между serial.write(buffer), так:выхода более точная задержка сообщения с питоном/pyserial

while True: 
    s.write(command) 
    time.sleep(0.01) 

Это работает отлично, но если аргумент сна меньше, чем примерно 0,015 сек, появляются некоторые сообщения без задержки на внешнем интерфейсе.

Есть ли лучшее решение для получения более точного времени для python.

Я использую его для тестирования встроенных устройств и его последовательных интерфейсов. Я знаю, что я работаю с python (и операционной системой), поэтому невозможно достичь реального времени. Но этот метод очень прост и гибкий. Поэтому я улучшу его, если это возможно.

ответ

0

Если вы не возражаете, спиннинг/сжигая немного CPU вместо того, чтобы спать вы можете воспользоваться (более или менее точным) мксек разрешению time.time() результатов, что-то вдоль этих линий:

import time 

def usec_sleep(sleep_time_in_usec): 

    start_time = time.time() * 1000000 
    end_sleep = start_time + sleep_time_in_usec 

    # regular sleep until ~20 msec before end_sleep 
    sleep_time_minus_20_msec = end_sleep - start_time - 20000 
    if sleep_time_minus_20_msec > 0: 
     time.sleep(sleep_time_minus_20_msec/1000000) 

    # spinning (for better precision) for the last up to ~20 msec 
    while time.time() * 1000000 < end_sleep: 
     pass 
+0

Спасибо, я проверю его на этой неделе. – user3336433

+0

почти такой же, как в моем нынешнем подходе. Я думаю, что он более или менее зависит от уровня интерфейса/os/driver. puffer будет записан в точном intervalls, но интерфейс обслуживается реже. – user3336433