线程间通信推荐用队列

# 队列是数据安全的,意思是自带锁,多线程间通信时,使用队列是好的,不会出现同一个数据被多个线程抢占,使用其他数据类型进行通信则需要自己实现锁功能

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')

 

posted @ 2018-10-28 12:55  _小溢  阅读(715)  评论(0)    收藏  举报