您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 执行例程 >

一个让Python代码运行更快的最佳方式

发布时间:2019-06-28 08:48 来源:未知 编辑:admin

  多年来,开发人员已经为Python的速度限制提出了各种变通方法。例如你可以在C中编写性能密集型任务并使用Python封装它,许多机器学习库正是这样做的。或者你可以使用Cython,这个项目可以将Python种加上运行时类型信息以便编译为C,通过这种方式来允许你使用Python代码。

  但变通办法从来都不是理想的。如果我们能够按原样使用现有的Python程序并以更快的速度运行它,那不是很好吗?这正是PyPy允许你做的事情。

  PyPy是Python解释器CPython的直接替代品。CPython将Python编译为中间字节码然后由虚拟机解释,而PyPy使用实时(JIT)编译将Python代码转换为本地机器的汇编语言。

  根据正在执行的任务,性能提升可能会非常显着。平均而言,PyPy将Python加速了大约7.6倍,一些任务加速了50倍或更多。CPython解释器根本不会执行与PyPy一样的优化方式,并且可能永远不会,因为这不是它的设计目标之一。

  最好的部分是开发人员需要很少甚至不需要努力来解锁PyPy提供的收益。只需将CPython替换为PyPy,并且大部分都已完成。下面讨论了一些例外,但是PyPy的目标是运行现有的,并且未经修改的Python代码并为其提供自动化的速度提升。

  PyPy目前通过项目的不同版本支持Python 2和Python 3。换句话说,你需要下载不同版本的PyPy,具体取决于你运行的Python版本。PyPy的Python 2分支已经存在了很长时间,但到目前为止,python 3版本的速度已经提高了很多。PyPy目前支持Python 3.5(发布版本)和Python 3.6(beta版本)。

  除了支持所有核心Python语言外,PyPy还可以与Python生态系统中的绝大多数工具配合使用,例如用于打包的pip或用于虚拟环境的virtualenv。大多数Python软件包,即使是那些带有C模块的软件包,都会按照原样运行。当然,也存在一些限制,我们将在下面介绍一些限制。

  PyPy使用其他即时编译器中的动态语言优化技术。它分析运行的Python程序,以确定在程序中创建和使用对象时的类型信息,然后使用该类型信息作为指导来加快速度。例如,如果Python函数仅使用一种或两种不同的对象类型,PyPy会生成机器代码来处理这些特定情况。

  PyPy的优化是在运行时自动处理,因此你通常不需要调整其性能。高级用户可能会尝试使用PyPy的命令行选项来为特殊情况生成更快的代码,但这种情况通常很少需要。

  PyPy也脱离了CPython处理一些内部函数的方式,但它同时试图保留兼容的行为。例如PyPy处理垃圾回收的方式与CPython不同。并非所有对象一旦超出范围就立即回收,所以在PyPy下运行的Python程序可能比在CPython下运行时显示占用更大的内存。但你仍然可以使用通过gc模块公开的Python高级垃圾回收控件,例如gc.enable(),gc.disable()和lect()等等。

  如果你想在运行时获得有关PyPy的JIT(实时)行为的信息,PyPy包含一个模块pypyjit,它向你的Python应用程序公开了许多JIT关联信息。如果你的某个功能或模块在JIT上表现不佳,那么pypyjit可以让你获得有关它的详细统计信息。

  另一个特定于PyPy的模块,__pypy__暴露了PyPy特有的其他功能,因此对于编写利用这些功能的应用程序非常有用。由于Python的运行的动态性,有可能构建在PyPy存在时使用这些功能的Python应用程序,而在不存在时忽略它们。

  可能看PyPy起来像魔法一样神奇,但其实它并不神奇。PyPy同样具有某些限制,可以削弱或消除某些程序的有效性。唉,PyPy不是CPython运行时的完全的通用替代品。

  PyPy在“纯”Python应用程序中表现最佳,换句话说也就是用Python编写的没有夹杂其他语言的应用程序中表现最佳。由于PyPy模仿CPython的本机二进制接口的方式,与C库(如NumPy)接口的Python包也没有那么出类拔萃了。

  PyPy的开发人员已经解决了这个问题,并使PyPy与大多数依赖于C扩展的Python包更加兼容。例如Numpy现在与PyPy兼容的非常好。但是,如果你希望与C的扩展最大程度地兼容,请使用CPython。

  PyPy优化Python程序的一个副作用是,运行时间较长的程序通过PyPy的优化获益最多。程序运行的时间越长,PyPy可以收集的运行时类型信息就越多,它可以进行的优化就越多。一劳永逸的Python脚本不会从这种事情中受益。例如受益的Python应用程序通常具有长时间循环运行的行为,或者在Web框架的后台中连续运行。

  PyPy编译Python代码,但它不是Python代码的编译器。由于PyPy执行其优化的方式和Python的固有动态特点,因此无法将生成的JITted代码作为独立二进制文件发出并重新使用它。每次运行都必须编译每个程序。如果你想将Python编译成可以作为独立应用程序运行的更快的代码,那么还是请使用Cython、Numba或当前实验性的Nuitka项目。

  05-2512:42北京创新乐知信息技术有限公司PyPy是Python解释器的替代品,对于某些Python程序来说会快很多倍。打开百度极速版,看更多图片作者SerdarYegulalp译者姜松浩,...博文来自:的博客

  作者SerdarYegulalp译者姜松浩,责编屠敏转载自CSDN(ID:CSDNnews)Python因其强大、灵活且易于使用等特性,而赢得了声誉......博文来自:AI科技大本营

  注:原文地址Python:fasterway注:个人学习记录用。建议大家看原文,原文对比更加清晰,一目了然。注:各位要使用这些技巧的话,请在自己的服务器上测试一遍,并且加大测试的数值,目前的用例都是1...博文来自:cangdu的专栏

  介绍并发concurrencyVS并行parallelism解决问题的步骤了解当前状态内在表示找到替代办法从替代办法中选择符合的介绍之前的硬件篇:博文来自:I AM BACK

  强烈建议教育网用户使用中科网源,本人实测最高网速能达到32M/s!(是M/s不是Mbit/s。...博文来自:的博客

  在说任意比例分割查找之前我们先来谈谈黄金分割查找与二分查找:在二分查找中,我们是取中旬等于左向右和的中间值,即用等分的方法进行查找。那为什么一定要等分呐?能不能进行“黄金分割”?也就是中间=左+0.6...博文来自:acDream_的博客

  以下的方式能够帮助PHP应用程序改善其扩展性。1)目标代码缓存每一次服务器的请求都需要PHP引擎编译并执目标代码。如果这一过程被缓存的话用户会获得更快的相应脚本。在Internet上有许多目标代码的缓...博文来自:ScriptViewer的专栏

  进程间通讯的方式:管道中还有命名管道和非命名管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式。FIFO是一种先进先出的队列。它类似于一...博文来自:一个手艺人

  题目一条包含字母A-Z的消息通过以下方式进行了编码:A-gt;1B-gt;2...Z-gt;26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例1:...博文来自:的博客

  原文地址:往往小的改变却能带来大的性能提升,下面说下p...博文来自:ws_cs_dn的专栏

  当学习了JavaNIO和BIO的API后,一个问题马上涌入脑海:我应该何时使用BIO,何时使用NIO呢?在本文中,我会尽量清晰地解析JavaNIO和BIO的差异、它们的使用场景,以及它们如何影响您的代...博文来自:kobejayandy的专栏

  在开机时加载太多程序电脑在启动的过程中,除了会启动相应的驱动程序外,还会启动一些应用软件,这些应用软件我们称为随即启动程序。随机启动程序不但拖慢开机时的速度,而且更快地消耗计算机资源以及内存,一...博文来自:lijianlin5200的专栏

  前言无论使用哪种语言,我们都需要关注性能优化,提高执行效率。选择脚本语言需要持久的速度。在某种程度上,这句话说明了Python作为一种脚本语言的缺点,即执行效率和性能不够好。虽然Python从来没有像...博文来自:的博客

  由于yum中有的mirror速度是非常慢的。如果yum选择了这个mirror,这个时候yum就会非常慢。       对此,可以下载fastestmirror插件。它会自动选择最快的mirror。yu...博文来自:话题在绕弯的专栏

  同学阿里三面面试官的一道面试题是:二叉树每个节点都保存一个整数,想要求所有节点数值之和,哪种遍历方式最快?首先定义二叉树structTree{intval;Tree*left;Tree*right;T...博文来自:na_beginning的专栏

  一直以来,小公司魅族都以善于在用户体验创新而闻名。这家公司在一开始就建立了与用户交流的文化,公司创始人黄章建立了一个强大的魅族论坛,注册人数有170万,每天活跃的用户在2万左右。黄章...博文来自:单眼皮的老虎的专栏

  假设有一个班级的小学生去操场上体育课,体育老师要求他们按照身高次序站成一队。每个小学生都知道自己的具体身高是多少厘米(假设每个小学生身高都不一样,否则就会为争执位置打架),但每个小学生都不承认别人比自...博文来自:鉏飞祥的博客

  代码常数怎么才能小一点呢~先安利一下BulaBulaCHN的整洁即是正义 怀念他教我卡常的日子泪之后啊我就来说一个小东西还是转的。。。来自二维数组不同遍历方法效率比较二维数组的遍历方式哪种更快呢?(先...博文来自:BlackJack

  前言本文是对《如何优化代码并使VBA程序尽可能快的运行》一文的补充,您在阅读本文时,可对照参考。在本文中,列举了大量的代码和示例。但在本文中所讨论的代码并不是本文的中心内容,它们只是用作测试代码运行速...博文来自:国际海员

  ProblemDescriptionsnow是个热爱打字的家伙,每次敲出更快的速度都会让他很开心。现在,他拿到一篇新的打字文章,已知这篇文章只有26个小写英文字母,给出snow打出这26个英文字母分别...博文来自:小坏蛋_千千

  相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法...博文来自:杨威的博客

  本帖只谈技术实现,首先我们自己来编译一个比特币客户端吧, 技术讨论,欢迎大家入伙(注明:csdn)。...博文来自:开心乐源的专栏

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能。首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer...博文来自:kongwei521的专栏

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  mybatis简单小巧易于上手,方便浏览修改sql语句博文来自:努力+坚持,而且还很年轻

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。   在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 (...博文来自:朱小厮的博客

  我们在做项目的时候有时候需要给图片添加水印,水寒今天就遇到了这样的问题,所以搞了一个工具类,贴出来大家直接调用就行。/** * 图片工具类 * @author 水寒 * 欢迎访问水寒的个人博客:...博文来自:水寒

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  1. 规则引擎面临的问题:业务规则的实现大部分是由开发人员来实现的 业务规则需要业务分析人员能够阅读和理解 业务规则的可读性和用户的友好性都不太好2. DSL领域特殊语言DSL == Domain...博文来自:哎幽的成长

  nginx 是个轻量级的Web服务器,比Apache不差博文来自:老徐2014

  若是研究区在中国,则在地理空间数据云有中国区合成好的数据,直接下载用即可。数据格式为TIF。坐标为WGS84,不用再转换投影。下载网址为:博文来自:hengcall的博客

  u013613428:楼主牛逼!(破音) 已关注您的博客,感谢您也关注下我的博客:

  u013613428:感谢分享 已关注您的博客,感谢您也关注下我的博客:

http://nicolashsiung.com/zhixinglicheng/152.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有