Форум сайта python.su
Необходимо реализовать задержку в 20 мкс в нескольких местах по ходу программы.
Раскидал 6 вызовов:
time.sleep(delay_ADC)
delay_ADC = 20 * 10**-6
import cProfile
import time
def SLEEP(num):
for i in range(num):
time.sleep(20*10**-6)
cProfile.run('SLEEP(1000000)')
Офлайн
Пока решил задачу следующим способом
import time
def bit_delay(secs):
if secs > 0.:
start = time.clock()
while (time.clock() - start) < secs:
pass
#print 'out',time.clock() - start
Офлайн
У time.sleep() большая погрешность поэтому с её помощью нельзя устанавливать маленькие задержки.
Офлайн
sleep попутно переключает поток - и добавляется неопределенность.
На винде time.close сделана через QueryPerformanceTimer - поэтому довольно точная, time.time хуже.
На линуксе - наоборот. time.time работает через gettimeofday
Отредактировано (Окт. 26, 2009 16:53:17)
Офлайн
Поскольку time.sleep() имеет большую мощность, его нельзя использовать для установления небольших задержек.
Retro Bowl College
Офлайн
попробуй свой тормозистор заюзать
def tormositor(ms: int) -> None: start_time = time.time() * 1000 # Convert to milliseconds target_time = start_time + ms while time.time() * 1000 < target_time: pass
Отредактировано ZerG (Окт. 27, 2023 14:55:27)
Офлайн
Ваш вывод верен. time.sleep() действительно не предназначен для точного управления микросекундными задержками в Python из-за ограничений операционной системы и различий в реализации интерпретатора. Для более точного контроля временных задержек на микросекундном уровне можно использовать модуль timeit или сторонние библиотеки, такие как pygame, pyserial или RPi.GPIO (для работы с GPIO на Raspberry Pi), в зависимости от ваших потребностей и платформы.
fnaf
Офлайн