最近在进行多线程之间数据交换的学习,选择运用队列进行数据交换,但遇到了一些问题,所以记录下来。
如有大神对我目前的学习有其他建议,欢迎在评论区批评指正。
一、queue.get()
获取队列头部数据,默认 block=True(方式为阻塞)
当队列为空时,系统不会直接返回None,而是停住等待,它想等等看队列会不会被其他线程塞入数据!!
阻塞如果不处理,会发生自锁。
阻塞的解决方法:
- queue.get(False)
- queue.get_nowait()
- 推荐:(因为1、2会系统错误,以至于程序提前结束)
if queue.empty():
break;
else:
queue.get()
二、queue.put()
向队列尾部添加数据,默认block=True(方式为阻塞)
当队列被填满后,系统又停住等待了!!
阻塞的解决方法:
- queue.put(False)
- queue.put_nowait()
- 推荐:(因为1、2会系统错误,以至于程序提前结束)
if queue.full():
break;
else:
queue.put()
三、queue.empty()
判断队列是否为空
四、queue.full()
判断队列现是否为满