我需要快速准确地从列表中发送重复消息。一个列表需要每 100 毫秒发送一次消息,窗口为 +/- 10 毫秒。我尝试使用下面的代码,但问题是定时器等待 100 毫秒,然后需要完成所有计算,使得定时器掉出可接受的窗口。
简单地减少等待是一种混乱且不可靠的黑客行为。如果列表在循环期间被编辑,则消息循环周围有一个锁。
关于如何让 python 在 100 毫秒左右一致地发送消息的想法?谢谢
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 毫秒调用一次函数。消息列表很小,通常小于元素。
下一个挑战是每 10 毫秒(+/- 1 毫秒)进行一次这项工作:P