Temporizador de repetición de Python rápido y preciso
Necesito enviar mensajes repetidos de una lista de forma rápida y precisa. Una lista debe enviar los mensajes cada 100 ms, con una ventana de +/- 10 ms. Intenté usar el siguiente código, pero el problema es que el temporizador espera los 100 ms, y luego todo el cálculo debe realizarse, haciendo que el temporizador caiga fuera de la ventana aceptable.
Simplemente disminuir la espera es un truco desordenado y poco confiable. Hay un bloqueo alrededor del bucle de mensajes en el caso de que la lista se edite durante el bucle.
¿Pensamientos sobre cómo hacer que Python envíe mensajes de manera consistente en torno a 100 ms? Gracias
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
Entiendo que el writeFunction causará algún retraso, pero no más de los 10ms permitidos. Básicamente necesito llamar a la función cada 100 ms para cada mensaje. La lista de mensajes es pequeña, generalmente menos que los elementos.
El siguiente desafío es tener este trabajo con cada 10 ms, +/- 1 ms: P