我遇到一种情况,我希望一个进程通过线路侦听消息。因为某些消息可能需要比其他消息更长的时间来处理,或者需要以不同的方式处理,所以我希望我的监听器只是将消息粘贴到一个或多个队列中。
我的问题是关于消耗这些队列的进程。我知道忙着等待并使用time.sleep是一个坏主意,看起来很容易出错并容易出错。所以我觉得我应该这样做:
def global_listener(queue, event)
while True:
message = wait_for_message()
queue.put(message)
if not event.is_set():
event.set()
def queue_listener(queue, event):
while True:
event.wait()
while not Queue.empty(): # assume no other threads are consuming it
message = queue.get()
process_message(message)
所以我的问题是,使用一个事件只是为了表示某个东西已被放入队列中是否合适?
答案 0 :(得分:0)
只需使用Queue.get
:
def queue_listener(queue, tmo=None):
while True:
while not queue.empty(): # Had a small typo here too, use instance method
try:
# Default is blocking with no timeout
message = queue.get(block=True, timeout=tmo)
process_message(message)
except Empty:
# Empty exception indicates timeout was reached
pass
它基本上是一个内置的Event
对象。