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



推荐阅读
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 利用Python进行学生学业表现评估与成绩预测分析
    利用Python进行学生学业表现评估与成绩预测分析 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 求助高手调试程序,非常感谢您的支持!在编写C语言程序时遇到了一些问题,具体代码如下:```c#include #include #include #define MAX 50int t;```希望有经验的开发者能提供指导,帮助解决调试中的难题。感谢您的时间和帮助! ... [详细]
  • 在探讨Fragment的使用时,FragmentTransaction是不可或缺的一部分。作为管理Fragment操作的核心类,FragmentTransaction提供了诸如显示、隐藏、添加和移除等方法,这些方法在实际开发中被广泛使用。本文将深入解析FragmentTransaction的源码实现机制,帮助开发者更好地理解和优化Fragment的管理。通过分析其内部工作原理,读者可以掌握如何高效地进行Fragment的动态管理和性能优化。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • Java中处理NullPointerException:getStackTrace()方法详解与实例代码 ... [详细]
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社区 版权所有