python程序的pypy加速
我们知道,python作为一种几乎是脚本语言的语言,其优点固然有,但是其有一个最大的缺点,就是运行速度没有办法和c,c++,java比。最近在些一些代码的时候也是碰到了这样的问题。
具体而言,python想提速度,基本思路是两个,有个就jit技术,在python中比较好用的就是pypy;另外一种就是先分析代码速度瓶颈,然后把性能瓶颈用c或者别的语言写成模块,让python调用。后面一种方法其实也存在折中,比如cython。对于cython,笔者目前也在学习中,后续有心得了,写成文章和大家分享。
今天主要讲一讲pypy。
我们先来看一个例子:
#!/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写的还快。
实在是太好用了!
于是,我们继续写一个:
#!/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才是真正的王道。
---------------------
作者:钱塘小甲子
来源:CSDN
原文:https://blog.csdn.net/qtlyx/article/details/78078636
版权声明:本文为博主原创文章,转载请附上博文链接!
python程序的pypy加速的更多相关文章
- 用Cython加速Python程序以及包装C程序简单测试
用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...
- 使用numba加速python程序
前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...
- python笔记:#002#第一个python程序
第一个 Python 程序 目标 第一个 HelloPython 程序 Python 2.x 与 3.x 版本简介 执行 Python 程序的三种方式 解释器 -- python / python ...
- 第一个 Python 程序
## 目标 * 第一个 `HelloPython` 程序* `Python 2.x` 与 `3.x` 版本简介* 执行 `Python` 程序的三种方式 * 解释器 —— `python` / ` ...
- 人生苦短之---第一个Python程序
第一个 Python 程序 目标 第一个 HelloPython 程序 Python 2.x 与 3.x 版本简介 执行 Python 程序的三种方式 解释器 —— python / python ...
- 谈谈 Python 程序的运行原理
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...
- Python学习札记(二) python3.5安装 + (假装是)第一个Python程序
参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...
- Python 开篇及第一个Python程序
本节内容 python 简单介绍 python 2.x 或者python 3.x python 安装 第一个python程序 一.python简单介绍 python的创始人为吉多.范罗苏姆(Guido ...
- python程序的编辑和运行、变量
第一个python程序 python是解释型弱类型高级语言 常见的python解释器CPython.IPython.pypy.JPython.IronPython 方法一.python程序可以写在命令 ...
随机推荐
- Git以及github的使用方法(六),管理修改
现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...
- Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树 &&convert-sorted-array-to-binary-search-tree——将数列转换为bst
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- was系统错误日志大量出现标识符缺失
原创作品.出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46909941 近日 ...
- Libx264 编码错误 Input picture width(320) is greater than stride (0)
Ffmpeg libx264编码出现 Input picture width(320) is greater than stride (0),问题出在视频格式不正确. libx264 编码要求输入源的 ...
- 借助autoit操作上传下载对话框(参数化)
虫师有一篇文章写的不错,链接如下:http://www.cnblogs.com/fnng/p/4188162.html 他的文章把upload.exe需要上传的文件写死了,下面的内容作为补充. 如果不 ...
- Git bare repo with multiple branches
http://stackoverflow.com/questions/9324762/git-bare-repo-with-multiple-branches Q: I want to make a ...
- 【转载】How to develop your own Boot Loader【怎么样开发自己的bootloader】
How to develop your own Boot Loader 怎么样开发自己的bootloader Table of content[目录] 1. Who may be interested ...
- Nginx详细的安装教程(linux)
转:https://blog.csdn.net/u013641234/article/details/73838472 Nginx作为一个web服务器,目前使用最多的就利用其负载均衡,本篇着重讲解的是 ...
- Shiro乱炖
眼瞅着7月份又要浑浑噩噩的荒度过去了... 说好的计划呢?人的惰性真是无法治愈的伤痛啊 话说最近研究Shiro, Linux和JavaScript, 但结果不怎么如意:Shiro还停留在理解拦截器方面 ...
- Mac OS command line TestNG - “Cannot find class in classpath” error
直接eclipse执行.xml文件可以正确执行 在mac下执行却总报错: [TestNG] [Error] Cannot find class in classpath 最后解决办法,classpat ...