# 队列是数据安全的,意思是自带锁,多线程间通信时,使用队列是好的,不会出现同一个数据被多个线程抢占,使用其他数据类型进行通信则需要自己实现锁功能import queue# 普通先进先出队列# q = queue.Queue() # 没有参数则表示队列没有指定深度# q.put(1) # 如果队列指定了深度则到了深度后,会阻塞在这里等待队列有空间后再向队列中放入数据# q.put_nowait() # 队列满了也不会阻塞在这里,但会有异常# q.get() # 从队列中获取数据,无数据后悔阻塞# q.get_nowait() # 从队列中获取数据,队列空时也不会阻塞,会报异常# 先进后出队列,栈# q = queue.LifoQueue() # 创建先进后出队列,就是栈# q.put(1)# q.get()# 优先级队列q = queue.PriorityQueue() # 优先级队列q.put((20, 'a')) # 20表示优先级,值越小,优先级越高,越先被get获取到。第二个参数为值q.put((10, 'ee'))q.put((10,'c')) # 同样等级优先级的,则按照值的ascii码优先级,同优先级下,值的ascii码优先级越高的,越先被get到q.put((30, 'cb'))print(q.get()) # (10, 'c')