我的编程空间,编程开发者的网络收藏夹
学习永远不晚

高性能Python之:Queue,deq

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

高性能Python之:Queue,deq

Python作为一门脚本语言,有着很多便捷易用的优秀特点,但他也有一个很大的缺陷,就是性能太差,这也是作为脚本语言不可避免的问题,这里我们来学习一些方法,提高Python的性能:

为了大家测试方便,这里同时给了代码的图片版和文字版。

  • queue是多线程中的使用的栈,但是Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时运行一个线程,因此 Python 多线程程序并不能改善程序性能,不能发挥多核系统的优势。

  • multiprocessing.Queue是Python 2.6 引入的用来实现多进程的一种高性能栈。

  • collections.deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

multiprocessing.Queue

用于多进程:

先来看官方文档:

高性能Python之:Queue,deque,queue对比

from multiprocessing import Pool

deff(x):

returnx*x

if__name__=='__main__':

withPool(5)asp:

print(p.map(f,[1,2,3]))

输出:

[1,4,9]

multiprocessing supports two types of communication channel between processes:

multiprocessing支持两种类型的进程间通信方式queues和pips。


Queues

The Queue class is a near clone of queue.Queue. For example:

Queue是queue.Queue的近似克隆。高性能Python之:Queue,deque,queue对比

from multiprocessing import Process,Queue

deff(q):

q.put([42,None,'hello'])

if__name__=='__main__':

q=Queue()

p=Process(target=f,args=(q,))

p.start()

print(q.get())# prints "[42, None, 'hello']"

p.join()

Queues are thread and process safe.

Queues是进程和线程安全的,也就是说,同一时间,只能由一个进程或者线程操作Queues。


queue

先来看官方文档:

高性能Python之:Queue,deque,queue对比

def worker():

whileTrue:

item=q.get()

ifitem is None:

break

do_work(item)

q.task_done()

q=queue.Queue()

threads=[]

foriinrange(num_worker_threads):

t=threading.Thread(target=worker)

t.start()

threads.append(t)

foritem insource():

q.put(item)

# block until all tasks are done

q.join()

# stop workers

foriinrange(num_worker_threads):

q.put(None)

fortinthreads:

t.join()


collections.deque

先来看官方文档:

有人对比过以上三者的性能,deque作为一种双向队列性能完胜其他两者。高性能Python之:Queue,deque,queue对比

>>>from collections import deque

>>>d=deque('ghi')# make a new deque with three items

>>>forelem ind:# iterate over the deque's elements

...print(elem.upper())

G

H

I

>>>d.append('j')# add a new entry to the right side

>>>d.appendleft('f')# add a new entry to the left side

>>>d# show the representation of the deque

deque(['f','g','h','i','j'])

>>>d.pop()# return and remove the rightmost item

'j'

>>>d.popleft()# return and remove the leftmost item

'f'

>>>list(d)# list the contents of the deque

['g','h','i']

>>>d[0]# peek at leftmost item

'g'

>>>d[-1]# peek at rightmost item

'i'

>>>list(reversed(d))# list the contents of a deque in reverse

['i','h','g']

>>>'h'ind# search the deque

True

>>>d.extend('jkl')# add multiple elements at once

>>>d

deque(['g','h','i','j','k','l'])

>>>d.rotate(1)# right rotation

>>>d

deque(['l','g','h','i','j','k'])

>>>d.rotate(-1)# left rotation

>>>d

deque(['g','h','i','j','k','l'])

>>>deque(reversed(d))# make a new deque in reverse order

deque(['l','k','j','i','h','g'])

>>>d.clear()# empty the deque

>>>d.pop()# cannot pop from an empty deque

Traceback(most recent call last):

File"<pyshell#6>",line1,in-toplevel-

d.pop()

IndexError:pop froman empty deque

>>>d.extendleft('abc')# extendleft() reverses the input order

>>>d

deque(['c','b','a'])

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

高性能Python之:Queue,deq

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

高性能Python之:Queue,deq

Python作为一门脚本语言,有着很多便捷易用的优秀特点,但他也有一个很大的缺陷,就是性能太差,这也是作为脚本语言不可避免的问题,这里我们来学习一些方法,提高Python的性能:为了大家测试方便,这里同时给了代码的图片版和文字版。queue
2023-01-31

详解高性能mysql之MySQL高级特性总结

MySQL是一款广泛使用的关系型数据库管理系统,具有高性能和高可靠性的特点。在高性能MySQL中,有一些高级特性可以帮助提升数据库的性能和可靠性。下面是对这些高级特性的详细解释。1. 主从复制(Master-Slave Replicatio
2023-09-22

Python学习之高级特性

切片在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取。这种方法可以帮助我们依次获取我们想要的元素。而切片可以帮助我们获取被切片元素的
2023-01-30

Javascript之怎么提高React性能

本篇内容主要讲解“Javascript之怎么提高React性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript之怎么提高React性能”吧!1.解决重复渲染问题我们大多数人都知
2023-07-05

Javascript之提高React性能的技巧

一些刚开始学习React,或者从其他框架转入React的开发者,一开始可能不会太关注性能。因为需要一些时间来发现新学习的框架的性能缺点。这篇文章主要介绍提高React性能的技巧,感兴趣的同学可以参考阅读
2023-05-15

Python高级特性之---切片操作

切片操作首先支持下标索引,通过[ N:M :P ]操作索引正向从0开始,逆向从-1开始N:切片开始位置M:切片结束位置(不包含)P:指定切片步长,为正数表示按照指定步长正向切片,为负数反之一、列表的切片操作列表切片后还是列表通过列表生成器定
2023-01-31

python 性能提升之 并行map

前段时间进行单一目录下10万张图片发送,效果很差,数据积压原来越多。性能问题提上议程。采用多线程 多进程 感觉比较繁琐,网上有介绍 map的并行处理的,使用后性能提高明细。网上介绍map如下介绍:MapMap是一个很棒的小功能,同时它也是P
2023-01-31

Android高级开发之性能优化典范

本章介绍android高级开发中,对于性能方面的处理。主要包括电量,视图,内存三个性能方面的知识点。1.视图性能(1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个
2022-06-06

提高Python性能的一些建议

最近换住的地方,网费到期,有两个星期没更新博客了,博客还是要坚持写的,有时候工作时遇到了相关问题,查看相关博客,还是能够得到一些思路或者灵感。虽然写篇博客要话费不少时间(我一般要花一个半小时到两个小时之间),但是这中间码字呀、归纳总结的过程
2023-01-31

九、Python高级功能之文件读写

Python高级功能之文件读写一、Python进行文件读写的函数时open或file    file('filename','mode')open('filename','mode')mode模式r    只读r+   读写w    写入,
2023-01-31

Python性能提升之延迟初始化

所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。构造一个延迟计算属性的主要目的是为了提升性能 property 在切入正题之前,我们了解下prope
2022-06-04

Pandas探索之高性能函数eval和query解析

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。panda
2022-06-05

Tomcat高并发之如何理解道与性能调优

这篇文章主要介绍“Tomcat高并发之如何理解道与性能调优”,在日常操作中,相信很多人在Tomcat高并发之如何理解道与性能调优问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Tomcat高并发之如何理解道与性
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录