Rapide et Précis Python Répétition de Minuterie

J'ai besoin d'envoyer de répéter les messages à partir d'une liste rapidement et précisément. Une liste des besoins pour envoyer les messages toutes les 100ms, avec un +/- 10ms fenêtre. J'ai essayé d'utiliser le code ci-dessous, mais le problème est que la minuterie attend les 100ms, et puis tout le calcul qui doit être fait, en faisant le minuteur de la chute de l'acceptable fenêtre.

La diminution de l'attente est un désordre, et peu fiables hack. Il y a un Verrou autour de la boucle de message dans le cas où la liste se trouve rejeté au cours de la boucle.

Pensées sur la façon d'obtenir python pour envoyer des messages de manière cohérente autour de 100ms? Grâce

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

Je comprends que les writeFunction va causer un peu de retard, mais pas plus que les 10ms permis. J'ai essentiellement besoin d'appeler la fonction à chaque 100ms pour chaque message. Le messagelist est de petite taille, généralement de moins d'éléments.

Le prochain défi est de faire ce travail avec tous les 10 ms, +/-1 ms 😛

"travailler avec tous les 10 ms, +/-1 ms' bonne chance avec celui-là 🙁

OriginalL'auteur dwpriest | 2013-03-23