リストから繰り返しメッセージをすばやく正確に送信する必要があります。 1つのリストは、100msごとに+/- 10msのウィンドウでメッセージを送信する必要があります。私は以下のコードを使用してみましたが、問題はタイマーが100ms待機してから、すべての計算を行う必要があり、タイマーを許容可能なウィンドウから外すことです。単に待ち時間を減らす高速で正確なPython繰返しタイマー
は汚いし、信頼できないハックです。ループ中にリストが編集されるイベントでは、メッセージループの周りにLockがあります。 Pythonは100msの周りを一貫してメッセージを送信するために取得する方法について
思考?ありがとう
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がいくつかの遅延を引き起こしますが、10msを超えないことを理解しています。私は本質的に、各メッセージに対して100msごとに関数を呼び出す必要があります。 messagelistは小さく、通常要素よりも小さい。 P
その1 :( –