Что делать, если команда time.sleep () отстает / медленнее, чем в реальном времени, в python? - PullRequest
0 голосов
/ 23 апреля 2019

Итак, я работаю над проектом с 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: ## YOU CAN ignore[it's just so the whole programs keeps repeating]
##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

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Здесь необходимо отметить, по крайней мере, две вещи:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...