Szybki i precyzyjny zegar powtarzający Pythona
Muszę szybko i precyzyjnie wysyłać powtarzające się wiadomości z listy. Jedna lista musi wysyłać wiadomości co 100 ms, z oknem +/- 10 ms. Próbowałem użyć poniższego kodu, ale problem polega na tym, że timer czeka 100ms, a następnie wszystkie obliczenia muszą zostać wykonane, dzięki czemu zegar wypadnie z akceptowalnego okna.
Zwykłe zmniejszanie czasu oczekiwania jest chaotycznym i zawodnym hackiem. Istnieje pętla wokół pętli wiadomości w przypadku edycji listy w pętli.
Myśli o tym, jak uzyskać Pythona do wysyłania wiadomości konsekwentnie około 100ms? Dzięki
from threading import Timer
from threading import Lock
class RepeatingTimer(object):
def __init__(self,interval, function, *args, **kwargs):
super(RepeatingTimer, self).__init__()
self.args = args
self.kwargs = kwargs
self.function = function
self.interval = interval
self.start()
def start(self):
self.callback()
def stop(self):
self.interval = False
def callback(self):
if self.interval:
self.function(*self.args, **self.kwargs)
Timer(self.interval, self.callback, ).start()
def loop(messageList):
listLock.acquire()
for m in messageList:
writeFunction(m)
listLock.release()
MESSAGE_LIST = [] #Imagine this is populated with the messages
listLock = Lock()
rt = RepeatingTimer(0.1,loop,MESSAGE_LIST)
#Do other stuff after this
Rozumiem, że funkcja writeFunction spowoduje pewne opóźnienie, ale nie więcej niż 10ms dozwolone. Zasadniczo muszę wywołać funkcję co 100 ms dla każdej wiadomości. Messagelist jest mały, zwykle mniej niż elementy.
Kolejnym wyzwaniem jest posiadanie tej pracy co 10 ms, +/- 1 ms: P