热门标签 | 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



推荐阅读
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
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社区 版权所有