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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage