Команда Time.sleep() в python работает медленнее, чем в реальном времени?

#python #time

#python #время

Вопрос:

Итак, я работаю над проектом с RPi, и (с кодом python) я хочу, чтобы он проверял что-то каждые 0,00001 секунды и отмечал количество времени, затраченного до выполнения условия.

Я использую time.sleep() , импортируя время

Если я установлю это значение равным 0,001 или больше, только тогда это сработает, если оно ниже 0,001, тогда время становится либо медленнее, либо быстрее, например. для проверки 1 секунды требуется около 3 секунд…

Что я могу сделать? Можете ли вы предложить какой-либо другой способ, кроме time.sleep ?

Следующий код просто говорит

 if GPIO 16 on the pi is high,
    then, until GPIO 32 is not high, it will time the time
  

И цикл прерывается, и код заканчивается, когда GPIO 32 находится на высоком уровне

Первый цикл while заключается в том, что программа продолжает цикл, для чего мне это было нужно, вы можете игнорировать

 import RPi.GPIO as hello
import time
    
hello.setwarnings(False)
hello.setmode(hello.BOARD)
hello.setup(16, hello.IN)
hello.setup(32, hello.IN)
    
t=0
while 1: 
##Main Code, with the problem...   
    while 1:

        t=0
        if hello.input(16)==1:
            print(t)
            while hello.input(32)==0:
                t=t 0.00001
                time.sleep(0.00001)#Not Working
            if hello.input(32)==1:
                print(t)
                print("Speed=",14/t,"cm/s")
                break
  

Ответ №1:

Существуют ограничения для всех функций, критичных ко времени. Я предлагаю переосмыслить использование sleep() и использовать объекты Timer, как указано в документальном фильме о Python. https://docs.python.org/2.4/lib/timer-objects.html

Ответ №2:

Здесь следует отметить как минимум две вещи:

  1. Аргумент time.sleep() и базовый системный вызов — это нижняя граница. Нет гарантии, что система не будет спать дольше. (На самом деле мы можем предсказать, что это произойдет, если обычно только на небольшую величину, если загрузка системы невелика.)
  2. Выполнение любого кода на Python за наносекундный промежуток времени нереально на современном оборудовании.
     >>> import timeit
    >>> timeit.timeit('pass', number=10000)
    8.20159912109e-05