Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python程序的pypy加速

python程序的pypy加速

作者头像
钱塘小甲子
发布于 2019-01-28 02:28:01
发布于 2019-01-28 02:28:01
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

我们知道,python作为一种几乎是脚本语言的语言,其优点固然有,但是其有一个最大的缺点,就是运行速度没有办法和c,c++,java比。最近在些一些代码的时候也是碰到了这样的问题。

具体而言,python想提速度,基本思路是两个,有个就jit技术,在python中比较好用的就是pypy;另外一种就是先分析代码速度瓶颈,然后把性能瓶颈用c或者别的语言写成模块,让python调用。后面一种方法其实也存在折中,比如cython。对于cython,笔者目前也在学习中,后续有心得了,写成文章和大家分享。

今天主要讲一讲pypy。

我们先来看一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import time
def list_function():
    list_1 = range(100000)
    list_2 = range(100000)
    result_list = list()
    for cnt in range(100):
        for (a, b) in zip(list_1, list_2):
            result_list.append(a + b)

    return sum(result_list)

start = time.time()

print list_function()
print 'time elapse', time.time() - start

这段代码很简单,反正测试用。

然后首先在命令行中用python命令执行一下,看一下花费了多少时间:

大概在三秒半左右,大家运行的时间可能会不一样,毕竟笔者的笔记本已经有点年纪了,但我还是很爱我的笔记本。

然后我们换一个命令来运行,pypy

        surprise,什么都没做,速度就快了一倍还要多,于是有人就说,这个东西真好用。这就是JIT的力量,有人说,有些代码,pypy可以做到比c写的还快。

实在是太好用了!

于是,我们继续写一个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import time
import pandas as pd

def list_function():
    list_1 = range(100000)
    list_2 = range(100000)
    result_list = list()
    for cnt in range(100):
        for (a, b) in zip(list_1, list_2):
            result_list.append(a + b)

    return sum(result_list)

def df_function():
    df = pd.DataFrame()
    df['a'] = range(100000)
    df['b'] = range(100000)
    accu = 0
    for cnt in range(100):
        accu += sum(df['a'] + df['b'])
    return accu

start = time.time()

print list_function()
print df_function()
print 'time elapse', time.time() - start

       在命令行中用python运行:

        大概5.5秒不到一点点的样子。然后我们想到了厉害的pypy。看一下效果吧:

        很遗憾,由于我们使用了pandas这一第三方包,所以不能用jit,也就是不能用pypy了,除非我们去下一个支持jit的pandas的包。换句话说,如果你写的python程序只包含build_in函数的话,那么很开心,pypy可以很好的加速,但是通常情况下并不是这样的,我能会用到各种各样的库。那怎么办,为了使用pypy而牺牲python最大的优点,第三方库,似乎有点舍本逐末了,还不如直接用cpp呢!

其实有一个叫jitpy的东西,据说可以用,但是。。好像最近网被墙了。。后续可以了再写一个。

当然,其实pypy也是可以自己安装包的,只是第一包不多,第二版本比较老,而且。。安装往往会出问题。或者cython才是真正的王道。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
测试面试题集-Python列表去重
请定义函数,将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]中的重复元素除去,写出至少3种方法。 方法一:利用集合去重 # !/usr/bin/python3 # -*- coding:utf-8 -*- # @Time:2019/12/10 07:00 # @微信公众号:ITester软件测试小栈 # @Author:coco # @Python交流群:604469740 # @Email:3593721069@qq.com # @Fil
可可的测试小栈
2019/12/12
6120
测试面试题集-Python列表去重
Pandas、Numpy性能优化秘籍(全)
pandas、numpy是Python数据科学中非常常用的库,numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。pandas是基于numpy的数据处理工具,能更方便的操作大型表格类型的数据集。但是,随着数据量的剧增,有时numpy和pandas的速度就成瓶颈。
算法进阶
2022/06/02
3K0
Pandas、Numpy性能优化秘籍(全)
Python基础(八) | 万字详解深浅拷贝、生成器、迭代器以及装饰器
因为操作的是列表,而原列表映射的是地址,修改元素后对地址进行映射,因此list1和2的修改相同
timerring
2022/10/04
6970
Python基础(八) | 万字详解深浅拷贝、生成器、迭代器以及装饰器
五种Python方法实现列表去重
将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]去除重复元素。
可可的测试小栈
2021/03/23
2.2K0
pypy真的能让python比c还快?
最近 “pypy为什么能让python比c还快” 刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。
州的先生
2021/06/21
7620
pypy真的能让python比c还快?
弄懂这56个Python使用技巧,秒变Python大神!
你也许知道如何进行列表解析,但是可能不知道字典/集合解析。它们简单易用且高效。就像下面这个例子:
一墨编程学习
2019/08/12
1.3K0
python的numba加速
        之前笔者写过一个pypy的加速方法,可以参阅笔者之前的文章:http://blog.csdn.net/qtlyx/article/details/78078636
钱塘小甲子
2019/01/28
1.2K0
Python基础面试,看这篇文章画重点吧
一直想写一些更加基础的文章,但是总是想不到好的点子,最近到了就业季,一大堆学生面临就业了,正好,从Python的面试题出发,分析和解答一些常见的面试题,并且总结一些文字。
py3study
2020/01/15
4680
python利用threading处理 list数据
需求:在从银行数据库中取出 几十万数据时,需要对 每行数据进行相关操作,通过pandas的dataframe发现数据处理过慢,于是 对数据进行 分段后 通过 线程进行处理;
用户1558882
2019/07/19
3.9K0
python利用threading处理  list数据
Python并发编程:开启性能优化的大门(7/10)
在当今数字化时代,Python 已成为编程领域中一颗璀璨的明星,占据着编程语言排行榜的榜首。无论是数据科学、人工智能,还是 Web 开发、自动化脚本编写,Python 都以其简洁的语法、丰富的库和强大的功能,赢得了广大开发者的青睐。
正在走向自律
2025/05/12
1880
Python并发编程:开启性能优化的大门(7/10)
Python装饰器、内置函数之金兰契友
装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种。所以也可以理解装饰器是一种特殊的函数。 因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展,而对源代码的修改是封闭的。 开放封闭原则主要体现在两个方面:
py3study
2020/01/17
3950
Python 提速大杀器之 numba 篇
你是不是曾经有这样的苦恼,python 真的太好用了,但是它真的好慢啊(哭死) ; C++ 很快,但是真的好难写啊,此生能不碰它就不碰它。老天啊,有没有什么两全其美的办法呢?俗话说的好:办法总是比困难多,大家都有这个问题,自然也就有大佬来试着解决这个问题,这就请出我们今天的主角: numba
OpenMMLab 官方账号
2022/01/18
3.1K0
加速Python循环的12种方法,最高可以提速900倍
在本文中,我将介绍一些简单的方法,可以将Python for循环的速度提高1.3到900倍。
deephub
2024/01/04
7150
加速Python循环的12种方法,最高可以提速900倍
用于图像处理的Python顶级库 !!
正如IDC所指出的,数字信息将飙升至175ZB,而这些信息中的巨大一部分是图片。数据科学家需要(预先)测量这些图像,然后再将它们放入人工智能和深度学习模型中。在愉快的部分开始之前,他们需要做重要的工作。
JOYCE_Leo16
2024/03/19
3360
用于图像处理的Python顶级库 !!
做到这二十条,Python程序性能轻松翻倍!
1.优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。 2. 减少冗余数据 如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。 3. 合理使用copy与deepcopy 对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。而有些
小小科
2018/05/02
1K0
做到这二十条,Python程序性能轻松翻倍!
Python爬虫 爬取B站视频弹幕 + 绘制词云
视频链接:https://www.bilibili.com/video/BV1zE411Y7JY
叶庭云
2020/09/17
3.5K0
Python爬虫    爬取B站视频弹幕 + 绘制词云
Day3 python基础
一、集合的使用 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集、差集、并集等关系 list_1 = [1, 4, 5, 7, 3, 6, 7, 9] list_1 = set(list_1) print(list_1, type(list_1)) list_2 = set([2, 6, 0, 66, 22, 8, 4]) print(list_1, list_2) print(list_1.intersection(li
py3study
2020/01/03
4930
【Python环境】Python性能优化的20条建议
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。 减少冗余数据 如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。 合理使用copy与deepcopy 对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。而有些情况下需要复制整个对
陆勤_数据人网
2018/02/26
7720
Python | 加一行注释,让你的程序提速10+倍!numba十分钟上手指南
之前的文章《源代码如何被计算机执行》已经提到计算机只能执行二进制的机器码,C、C++等编译型语言依靠编译器将源代码转化为可执行文件后才能运行,Python、Java等解释型语言使用解释器将源代码翻译后在虚拟机上执行。对于Python,由于解释器的存在,其执行效率比C语言慢几倍甚至几十倍。
PP鲁
2019/12/26
7.7K0
Python 性能优化的20条招数
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在 Python 中可以通过选择合适的数据结构来优化时间复杂度,如 list 和 set 查找某一个元素的时间复杂度分别是O(n)和O(1
小小科
2018/05/04
1.2K0
Python 性能优化的20条招数
相关推荐
测试面试题集-Python列表去重
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验