python队列queue不堵塞_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):

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

ifself._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):

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

ifself._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月出版)出版不到两个月完成了第二次印刷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值