我编写了一个基本实用程序,它在一个线程中侦听消息,将它们添加到 FIFO 队列并在另一个线程中处理它们。每条消息都需要固定的时间来处理(它正在等待闪烁的灯停止闪烁),但消息可以随机到达(patterns
在代码中是一个正则表达式字典以匹配传入的消息,如果找到匹配项,则将其添加到队列以及要闪烁的颜色模式)。
blink_queue = Queue()
def receive(data) :
message = data['text']
for pattern in patterns:
if re.match(pattern, message):
blink_queue.put(patterns[pattern])
break
return True
def blinker(q) :
while True:
args = q.get().split()
subprocess.Popen(
[blink_app] + args,
startupinfo=startupinfo,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
time.sleep(blink_wait)
q.task_done()
def subscribe():
print("Listening for messages on '%s' channel..." % channel)
pubnub.subscribe({
'channel' : channel,
'callback' : receive
})
blink_worker = Thread(target=blinker, args=(blink_queue,))
blink_worker.daemon=True
blink_worker.start()
sub_thread = Thread(target=subscribe)
sub_thread.daemon=True
sub_thread.start()
sub_thread.join()
如何在 Python 中实现一个 FIFO 队列,如果它变大,它会自动修剪最旧的(第一个)队列。我是创建另一个观看线程,还是在subscribe
线程上检查大小?我是 Python 的新手,所以如果有一个完全合乎逻辑的数据类型,请随时称我为菜鸟,并把我送到正确的方向。