Python实现带有阻塞和超时放弃功能的队列结构

本文代码对Python列表进行封装并模拟了队列结构,入队时如果队列已满则阻塞当前线程,超时则放弃;出队时如果队列已空则阻塞当前线程,超时则放弃。

import time

class myQueue:

    def __init__(self, size = 10):

        self._content = []

        self._size = size

        self._current = 0

    def setSize(self, size):

        if size < self._current:

            #如果缩小队列,应删除后面的元素

            for i in range(size, self._current)[::-1]:

                del self._content[i]

            self._current = size

        self._size = size

    def put(self, v, timeout=999999):

        #模拟入队,在列表尾部追加元素

        if self._current < self._size:

            self._content.append(v)

            self._current = self._current+1

        else:

            #队列满,阻塞,超时放弃

            for i in range(timeout):

                time.sleep(1)

                if self._current < self._size:

                    self._content.append(v)

                    self._current = self._current+1

                    break

            else:

                return '队列已满,超时放弃'

    def get(self, timeout=999999):

        #模拟出队,从列表头部弹出元素

        if self._content:

            self._current = self._current-1

            return self._content.pop(0)

        else:

            #队列为空,阻塞,超时放弃

            for i in range(timeout):

                time.sleep(1)

                if self._content:

                    self._current = self._current-1

                    return self._content.pop(0)

            else:

                return '队列为空,超时放弃'

    def show(self):

        #如果列表非空,输出列表

        if self._content:

            print(self._content)

        else:

            print('The queue is empty')

        

    def empty(self):

        self._content = []

        self._current = 0

    def isEmpty(self):

        return not self._content

    def isFull(self):

        return self._current == self._size

热烈庆祝拙作《Python可以这样学》(ISBN:9787302456469,董付国著,清华大学出版社,2017年2月出版)出版不到两个月完成了第二次印刷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值