热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python双向队列与单向队列

2019独角兽企业重金招聘Python工程师标准5、双向队列(deque)一个线程安全的双向队列classdeque(object):deque([iterable

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

5、双向队列(deque)
一个线程安全的双向队列
class deque(object):"""deque([iterable[, maxlen]]) --> deque objectBuild an ordered collection with optimized access from its endpoints."""def append(self, *args, **kwargs): # real signature unknown""" Add an element to the right side of the deque. """passdef appendleft(self, *args, **kwargs): # real signature unknown""" Add an element to the left side of the deque. """passdef clear(self, *args, **kwargs): # real signature unknown""" Remove all elements from the deque. """passdef count(self, value): # real signature unknown; restored from __doc__""" D.count(value) -> integer -- return number of occurrences of value """return 0def extend(self, *args, **kwargs): # real signature unknown""" Extend the right side of the deque with elements from the iterable """passdef extendleft(self, *args, **kwargs): # real signature unknown""" Extend the left side of the deque with elements from the iterable """passdef pop(self, *args, **kwargs): # real signature unknown""" Remove and return the rightmost element. """passdef popleft(self, *args, **kwargs): # real signature unknown""" Remove and return the leftmost element. """passdef remove(self, value): # real signature unknown; restored from __doc__""" D.remove(value) -- remove first occurrence of value. """passdef reverse(self): # real signature unknown; restored from __doc__""" D.reverse() -- reverse *IN PLACE* """passdef rotate(self, *args, **kwargs): # real signature unknown""" Rotate the deque n steps to the right (default n&#61;1).  If n is negative, rotates left. """passdef __copy__(self, *args, **kwargs): # real signature unknown""" Return a shallow copy of a deque. """passdef __delitem__(self, y): # real signature unknown; restored from __doc__""" x.__delitem__(y) <&#61;&#61;> del x[y] """passdef __eq__(self, y): # real signature unknown; restored from __doc__""" x.__eq__(y) <&#61;&#61;> x&#61;&#61;y """passdef __getattribute__(self, name): # real signature unknown; restored from __doc__""" x.__getattribute__(&#39;name&#39;) <&#61;&#61;> x.name """passdef __getitem__(self, y): # real signature unknown; restored from __doc__""" x.__getitem__(y) <&#61;&#61;> x[y] """passdef __ge__(self, y): # real signature unknown; restored from __doc__""" x.__ge__(y) <&#61;&#61;> x>&#61;y """passdef __gt__(self, y): # real signature unknown; restored from __doc__""" x.__gt__(y) <&#61;&#61;> x>y """passdef __iadd__(self, y): # real signature unknown; restored from __doc__""" x.__iadd__(y) <&#61;&#61;> x&#43;&#61;y """passdef __init__(self, iterable&#61;(), maxlen&#61;None): # known case of _collections.deque.__init__"""deque([iterable[, maxlen]]) --> deque objectBuild an ordered collection with optimized access from its endpoints.# (copied from class doc)"""passdef __iter__(self): # real signature unknown; restored from __doc__""" x.__iter__() <&#61;&#61;> iter(x) """passdef __len__(self): # real signature unknown; restored from __doc__""" x.__len__() <&#61;&#61;> len(x) """passdef __le__(self, y): # real signature unknown; restored from __doc__""" x.__le__(y) <&#61;&#61;> x<&#61;y """passdef __lt__(self, y): # real signature unknown; restored from __doc__""" x.__lt__(y) <&#61;&#61;> x a new object with type S, a subtype of T """passdef __ne__(self, y): # real signature unknown; restored from __doc__""" x.__ne__(y) <&#61;&#61;> x!&#61;y """passdef __reduce__(self, *args, **kwargs): # real signature unknown""" Return state information for pickling. """passdef __repr__(self): # real signature unknown; restored from __doc__""" x.__repr__() <&#61;&#61;> repr(x) """passdef __reversed__(self): # real signature unknown; restored from __doc__""" D.__reversed__() -- return a reverse iterator over the deque """passdef __setitem__(self, i, y): # real signature unknown; restored from __doc__""" x.__setitem__(i, y) <&#61;&#61;> x[i]&#61;y """passdef __sizeof__(self): # real signature unknown; restored from __doc__""" D.__sizeof__() -- size of D in memory, in bytes """passmaxlen &#61; property(lambda self: object(), lambda self, v: None, lambda self: None)  # default"""maximum size of a deque or None if unbounded"""__hash__ &#61; Nonedeque

既然有双向队列&#xff0c;也有单项队列&#xff08;先进先出 FIFO &#xff09;
class Queue:"""Create a queue object with a given maximum size.If maxsize is <&#61; 0, the queue size is infinite."""def __init__(self, maxsize&#61;0):self.maxsize &#61; maxsizeself._init(maxsize)self.mutex &#61; _threading.Lock()self.not_empty &#61; _threading.Condition(self.mutex)self.not_full &#61; _threading.Condition(self.mutex)self.all_tasks_done &#61; _threading.Condition(self.mutex)self.unfinished_tasks &#61; 0def task_done(self):self.all_tasks_done.acquire()try:unfinished &#61; self.unfinished_tasks - 1if unfinished <&#61; 0:if unfinished < 0:raise ValueError(&#39;task_done() called too many times&#39;)self.all_tasks_done.notify_all()self.unfinished_tasks &#61; unfinishedfinally:self.all_tasks_done.release()def join(self):self.all_tasks_done.acquire()try:while self.unfinished_tasks:self.all_tasks_done.wait()finally:self.all_tasks_done.release()def qsize(self):"""Return the approximate size of the queue (not reliable!)."""self.mutex.acquire()n &#61; self._qsize()self.mutex.release()return ndef empty(self):"""Return True if the queue is empty, False otherwise (not reliable!)."""self.mutex.acquire()n &#61; not self._qsize()self.mutex.release()return ndef full(self):"""Return True if the queue is full, False otherwise (not reliable!)."""self.mutex.acquire()n &#61; 0 < self.maxsize &#61;&#61; self._qsize()self.mutex.release()return ndef put(self, item, block&#61;True, timeout&#61;None):self.not_full.acquire()try:if self.maxsize > 0:if not block:if self._qsize() &#61;&#61; self.maxsize:raise Fullelif timeout is None:while self._qsize() &#61;&#61; self.maxsize:self.not_full.wait()elif timeout < 0:raise ValueError("&#39;timeout&#39; must be a non-negative number")else:endtime &#61; _time() &#43; timeoutwhile self._qsize() &#61;&#61; self.maxsize:remaining &#61; endtime - _time()if remaining <&#61; 0.0:raise Fullself.not_full.wait(remaining)self._put(item)self.unfinished_tasks &#43;&#61; 1self.not_empty.notify()finally:self.not_full.release()def put_nowait(self, item):"""Put an item into the queue without blocking.Only enqueue the item if a free slot is immediately available.Otherwise raise the Full exception."""return self.put(item, False)def get(self, block&#61;True, timeout&#61;None):self.not_empty.acquire()try:if not block:if not self._qsize():raise Emptyelif timeout is None:while not self._qsize():self.not_empty.wait()elif timeout < 0:raise ValueError("&#39;timeout&#39; must be a non-negative number")else:endtime &#61; _time() &#43; timeoutwhile not self._qsize():remaining &#61; endtime - _time()if remaining <&#61; 0.0:raise Emptyself.not_empty.wait(remaining)item &#61; self._get()self.not_full.notify()return itemfinally:self.not_empty.release()def get_nowait(self):"""Remove and return an item from the queue without blocking.Only get an item if one is immediately available. Otherwiseraise the Empty exception."""return self.get(False)def _init(self, maxsize):self.queue &#61; deque()def _qsize(self, len&#61;len):return len(self.queue)# Put a new item in the queuedef _put(self, item):self.queue.append(item)# Get an item from the queuedef _get(self):return self.queue.popleft()Queue.Queue



转:https://my.oschina.net/eddylinux/blog/526737



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
author-avatar
TST闪闪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有