Queue模块解决了生产者、消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程。
Queue对象定义了以下公共方法。
qsize():返回队列的大小。
empty():判断队列是否为空。
full():判断队列是否满了。
put(item[,block[,timeout]]):插入元素到队列,如果可选参数block为True,并且timeout为None(默认值),将等待队列中有空闲位置,如果timetout为一个正整数,将最多等待timeout秒,然后抛出Full异常。如果Block为False,在队列中有空余位置时直接执行插入操作,如果没有则抛出异常。
put_nowait(item):相当于put(item,False)
get([block[,timeout]]):从队列中取出一个元素,如果可选参数block为True,并起timeout为None,如果队列为空将等待直到队列中不为空,如果timeout为一个正整数,则只会等待最多timeout秒,然后抛出Empty异常。如果block为False,如果队列非空将直接返回元素,如果为空则抛出异常。
get_nowait():相当于get(False)
join():等待队列中所有的元素被取出并执行。
task_done():当前一个从队列中取出的任务执行完毕之后,通过这个方法告诉队列操作已经执行完毕。
例如下面的例子:
1 def worker(): 2 while True: 3 item = q.get() 4 do_work(item) 5 q.task_done() 6 7 q = Queue() 8 for i in range(num_worker_threads): 9 t = Thread(target=worker) 10 t.daemon = True 11 t.start() 12 13 for item in source(): 14 q.put(item) 15 16 q.join() # block until all tasks are done
原文:http://www.cnblogs.com/fireflow/p/4869551.html