python队列queue不堵塞_python 队列(queue)阻塞

背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞。

下面来说一下阻塞的类型,然后怎么避免阻塞~

一、阻塞的类型

队列的阻塞分为:入队(put)时的阻塞、出队(get)时的阻塞、整体(join)的阻塞(消费的阻塞)

二、入队的阻塞

importqueuedef入队阻塞():

q= queue.Queue(maxsize=3)for i in range(4):

q.put('任务' + str(i+1))print('Finished')if __name__ == '__main__':

入队阻塞()

注:因为定义的队列的 maxsize=3,但 put 了4个元素进队列,第4个元素将无法 put 进队列,发生阻塞;注意:就算不设置 maxsize,电脑的内存也是有限的,队列也是会满的。当队列已满,做 put 操作时,一样会发生阻塞。

正确的处理方法:

importqueuedef入队阻塞():

q= queue.Queue(maxsize=3)for i in range(4):try:

q.put('任务' + str(i+1), block=True, timeout=3)exceptqueue.Full:print('任务%d: 队列已满,写入失败' % (i+1))print('Finished')if __name__ &

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值