queue模块可以实现各种多个生产者-多个消费者队列,可用于在执行的多个线程之间安全地交换信息
队列类 | 说明 |
Queue([maxsize]) | 创建一个FIFO队列。maxsize是队列中可以放入的项的最数量,如果省略maxsize参数或将它设置为0,队列大小将无究大 |
LifeQueue([maxsize]) | 创建一个LIFO队列,也可以叫栈 |
PriorityQueue([maxsize]) | 创建一个优先级队列,其中项按照优先级从低到高依次排好。使用这种队列时,项应该是(priority, data)形式的元组,其中priotiry是一个数字 |
方法 | 说明 |
q.qsize() | 返回队列的正确大小。因为其他队列可能正在更新队列,因此该方法返回的数字不完全可靠 |
q.empty() | 如果队列为空,返回True,否则返回False |
q.full() | 如果队列已满,返回True,否则返回False |
q.put(item [, block [, timeout]]) | 将item放入队列中,如果可选参数block为True(默认值),调用者将被阻塞直到队列中出现可用的空闲位置为止。如果block为False,队列满时将引发Full异常。timeout提供可选的超时值,单位为秒,如果出现超时,将引发Full异常 |
q.put_nowait(tiem) | 等价于q.put(item, False)方法 |
q.get([block [, timeout]]) | 从队列中删除一项,然后返回这个项。如果可选参数block为True(默认值)。调用者将阻塞,直到队列中出现可用的项。如果可选参数block为False,队列为空时会引发tempty异常。timeout提供可选的超时值,单位为秒。如果出现超时,将引发Empty异常 |
q.get_nowait() | 等价于get(0)方法 |
q.task_done() | 队列中数据的消费者用来指示对于项的处理已经结束。如果使用此方法,那么从队列中删除的每一项都应该调用一次 |
q.join() | 阻塞直到队列中的所有项均被删除和处理为止。一量为队列中的每一项都调用于一次q.task_done()方法,此方法将会直接返回 |
import threading
from queue import Queue
class WorkerThread(threading.Thread):
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self, *args, **kwargs)
self.input_queue = Queue()
def send(self, item):
self.input_queue.put(item)
def close(self):
self.input_queue.put(None)
self.input_queue.join()
def run(self):
while True:
item = self.input_queue.get()
if item is None:
break
# TODO, 具体逻辑
print(item)
self.input_queue.task_done()
# 完成,指示收到和返回哨兵
self.input_queue.task_done()
return None
if __name__ == '__main__':
wt = WorkerThread()
wt.start()
wt.send('hello')
wt.send('world')
wt.close()
页面更新:2024-03-13
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号