リストから繰り返しメッセージをすばやく正確に送信する必要があります。1 つのリストは、+/- 10ms のウィンドウで 100ms ごとにメッセージを送信する必要があります。以下のコードを使用してみましたが、問題は、タイマーが 100 ミリ秒待機し、その後すべての計算を実行する必要があり、タイマーが許容範囲外になることです。
単純に待ち時間を減らすのは面倒で、信頼性の低いハックです。ループ中にリストが編集された場合に備えて、メッセージ ループの周りにロックがあります。
100ms前後で一貫してメッセージを送信するようにPythonを取得する方法について考えていますか? ありがとう
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
writeFunction によって多少の遅延が発生することは理解していますが、許可されているのは 10 ミリ秒以内です。基本的に、メッセージごとに 100 ミリ秒ごとに関数を呼び出す必要があります。メッセージリストは小さく、通常は要素よりも少ないです。
次の課題は、これを 10ms、+/-1ms ごとに動作させることです:P