Schneller und präziser Python Repeating Timer
Ich muss sich wiederholende Nachrichten aus einer Liste schnell und präzise senden. Eine Liste muss die Nachrichten alle 100 ms mit einem Fenster von +/- 10 ms senden. Ich habe versucht, den folgenden Code zu verwenden, aber das Problem ist, dass der Timer die 100 ms wartet und dann die gesamte Berechnung durchgeführt werden muss, sodass der Timer aus dem zulässigen Fenster fällt.
Einfach das Warten zu verkürzen ist ein chaotischer und unzuverlässiger Hack. Es gibt eine Sperre um die Nachrichtenschleife, falls die Liste während der Schleife bearbeitet wird.
Überlegungen, wie Python dazu gebracht werden kann, Nachrichten konsistent um 100 ms zu senden? Vielen Dank
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
Ich verstehe, dass die WriteFunction einige Verzögerung verursachen wird, aber nicht mehr als die 10ms erlaubt. Ich muss die Funktion im Wesentlichen alle 100 ms für jede Nachricht aufrufen. Die Messageliste ist klein, normalerweise weniger als Elemente.
Die nächste Herausforderung besteht darin, diese Arbeit alle 10 ms zu machen, +/- 1 ms: P