У меня была проблема дозирования вызова функции в главном l oop. Я написал некоторый рабочий код, основанный на оценке времени, а затем спросил друга, что, возможно, мне нужно что-то похожее на потоки, чтобы улучшить мой код. Мой друг сказал мне, что есть методы, называемые «debounce and throttle», которые лучше, чем потоки, потому что с потоками легко связываться. Поэтому я провел некоторое исследование, прочитал что-то и пришел к выводу, что для дебадинга нужен поток или что-то параллельное или асинхронное, чтобы работать должным образом, поэтому предложение моего друга было не очень осторожным.
Проблема заключается в том, что только на основе по прошествии времени возможно, что последние вызовы, которые еще не прошли указанный интервал времени, будут потеряны, поскольку функция не будет запущена позже во второй раз с момента ее запуска. Однако в моем конкретном случае c основной l oop следует через равные промежутки времени (в одну секунду), и поэтому единственный риск, который я запускаю, - это потерять последнюю секунду возможного выполнения, что является несуществующей проблемой. .
Итак, я написал этот декоратор, который в моем случае должен работать (если нет ошибок, которых я не видел), вы указываете для него время каждого тика и время ожидания, прежде чем разрешить оформленную функцию. начать с последнего триггера, и он выполняет декорированную функцию (плюс, только если вход изменился).
def throttled_debounce(tic, wait):
def decorate(delayedfun):
_start = 0
_value = None
_lst_e = None
def wrap(*args, **kwargs):
nonlocal _start, _value, _lst_e
val = (args, kwargs)
if val != _lst_e:
_start = 0
_lst_e = val
elif _lst_e != _value:
_start += tic
if _start >= wait:
_value = val
_start = 0
result = delayedfun(*args, **kwargs)
return result
return wrap
return decorate
tic, wait = 0.5,2
@trothled_debounce(tic,wait)
def printa(s):
print(s)
from time import sleep
for i in range(1,21):
printa(i)
sleep(tick)
if i%4 == 0:
for y in range(3):
printa(i)
Но, возвращаясь к первоначальному вопросу, я ошибаюсь или в «нормальных» случаях (где основной l oop повторяется непрерывно, без интервалов) лучший способ написать отладку - это с помощью потока или чего-то подобного?