python中实现队列的queue模块
qingheluo2020-04-06清河洛313
python中的queue模块提供了同步的、线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现了锁原语(可以理解为原子操作,要么不做,要么就全部做完),解决了python多线程编程中的线程不安全。队列与列表的区别队列中数据只有一份,取出就没有了,列表数据取出只是复制了一份1、初始化一个队列
Queue(maxsize=0) 或者
LifoQueue(maxsize=0) 或者
PriorityQueue(maxsize=0)
maxsize是个整数,指...
python中的queue模块提供了同步的、线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现了锁原语(可以理解为原子操作,要么不做,要么就全部做完),解决了python多线程编程中的线程不安全。
队列与列表的区别
队列中数据只有一份,取出就没有了,列表数据取出只是复制了一份
1、初始化一个队列 Queue(maxsize=0) 或者 LifoQueue(maxsize=0) 或者 PriorityQueue(maxsize=0) maxsize是个整数,指明了队列中能存放的数据个数上限。一旦达到上限,插入会导致阻塞,直到队列中有数据被取出。如果maxsize<=0,队列大小没有限制 2、qsize():获取队列当前数据的数量 3、empty():判断队列是否为空 4、full():判断队列是否满 5、get(block=True, timeout=None):从队列中取出一个数据 block:是否阻塞调用, 阻塞调用如果队列为空会一直阻塞直到队列中放入数据 非阻塞调用时队列已空抛出Empty异常 如果设置了timeout超时时间并且发生超时抛出Empty异常 get_nowait()为非阻塞取出数据,等同于get(block=False) 6、put(item, block=True, timeout=None):讲一个数据放入到队列中 阻塞调用如果队列已满会一直阻塞直到队列中取出数据 非阻塞调用时队列已满抛出Full异常 如果设置了timeout超时时间并且发生超时抛出Full异常 put_nowait(item)为非阻塞取出数据,等同于put(item,block=False) 7、queue.clear():清空队列 8、task_done():意味着从队列中取出的一个任务已经完成。每一次调用get()得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。 9、join():阻塞调用线程,直到队列中的所有任务被处理掉。只要有数据被加入队列,未完成的任务数就会增加。当调用task_done(),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。优先队列:优先队列不同于先进先出或后进先出,它是出的规则和进入的顺序无关,只和数据的优先级有关,优先级小的数据先出,在put()的时候item需要传入一个二元元祖,第一个元素是一个正整数,表示优先级,第二个元素是放入的数据,优先级的数字可以重复,同等优先级的数据遵循先进先出的原则。