Devo inviare messaggi ripetuti da un elenco in modo rapido e preciso. Una lista deve inviare i messaggi ogni 100 ms, con una finestra di +/- 10ms. Ho provato ad usare il codice qui sotto, ma il problema è che il timer aspetta i 100 ms, e quindi tutto il calcolo deve essere fatto, facendo cadere il timer dalla finestra accettabile.Timer di ripetizione Python veloce e preciso
Basta diminuire l'attesa è un hack incasinato e inaffidabile. C'è un blocco attorno al loop dei messaggi nel caso in cui l'elenco venga modificato durante il ciclo.
Pensieri su come ottenere Python per inviare messaggi costantemente intorno ai 100 ms? Grazie
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
Capisco che la funzione write causerà qualche ritardo, ma non superiore ai 10ms consentiti. In sostanza, ho bisogno di chiamare la funzione ogni 100ms per ogni messaggio. Il messaggista è piccolo, in genere meno degli elementi.
La prossima sfida è quella di avere questo lavoro con ogni 10ms, +/- 1ms: P
'lavoro con ogni 10ms, +/- 1ms' buona fortuna con quella :( –