在Python线程中使用队列和事件是否过分?

时间:2014-03-25 16:35:57

标签: python multithreading

我遇到一种情况,我希望一个进程通过线路侦听消息。因为某些消息可能需要比其他消息更长的时间来处理,或者需要以不同的方式处理,所以我希望我的监听器只是将消息粘贴到一个或多个队列中。

我的问题是关于消耗这些队列的进程。我知道忙着等待并使用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)

所以我的问题是,使用一个事件只是为了表示某个东西已被放入队列中是否合适?

1 个答案:

答案 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对象。