python确实是十分慢的语言,有多慢?不好说,我测试过一些非io相关的程序,比java慢大约50倍是有的,比c++只会更慢(除了string操作外)

幸好python从来不缺各种工具,对于加快速度的工具选择更是丰富。数了一下有: pypy, psyco, cython,swig,pyrex等等。

这些工具的一个核心抽象说来只有一点:找出慢的部分然后把它变快。 直观的做法是把慢的部分变为c。。。通常一套程序和速度相关的部分只有20%是关键,把它优化了也就差不多了。另外一种做法就是jit了。直接变为机器码。

对于上述的这些工具曾经做过一番试用,总结下来如果需要考虑到易用性,跨平台性还有兼容性那么只有cython & swig满足这个要求。其他的方案总有些限制,故此暂时不作考虑。

cython  swig哪个更好? 这个不好说。

cython可以提供更细粒度的交互,好比.net 下的 c++/cli。可以把py和c代码混用。能更方便控制性能部分的范围。

swig相当于P/Invoke

swig只能通过函数和class一级的调用,而且会生成额外的wrapper。性能上有一定损耗,而且wrapper本身未必能符合使用要求,最常见的做法还是引入类似pimpl技法,又封装一层。有时候看起来有些臃肿,cython本身没有这个问题

使用 cdef class 可以直接实现想要的接口。

不过cython使用的难度高于swig。后者只需要swig,a working compiler。py本身都不需要。适合封装原有的库。

而且swig本身支持十分多的语言,新版本2.0.4对py做了专门的优化,如果是想快速封装原有的库,用swig是不错的选择。

cython需要自行实现setup.py, 需要制作起码的pyx, pyd,语法方面需要花额外的时间去理解,不如swig直观。但是cython有个优点是可以把pure py code变为c的代码。 我测试过手头用的几何计算的函数,简单把py code变为c 可以

获得大约30%的提升,不用改一行代码,很可观。

对于新应用,会逐渐改用cython来实现。swig只保留用作兼容用途 或者给其他语言共用。

这两者都支持windows平台。我发现一个有趣的现象,在py里面,一般来说只要能在windows下用的,跨平台就不成问题。

speeding up python相关推荐

  1. Recurrent Neural Network系列2--利用Python,Theano实现RNN

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  2. TZC Python编程入门教程 ————题解

    本博客原文地址:Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园,原文体验更佳 如果你是一名浙江2020级及以后的高中生要学习Python,抑或是一位科学工作者要学习 ...

  3. python做人脸识别速度_Python人脸识别速度慢

    我正在尝试构建一个使用面部识别库实时检测面部的软件. 我使用网络摄像头进行了尝试,结果令人鼓舞,帧频也相当稳定,但是当我切换到.mp4视频时,在fps方面效果非常差. 我在OpenCV中使用Pytho ...

  4. python竖着展示诗_十八年-python诗词动画

    未经作者授权,禁止转载 十八年 十八年,如果是个孩子, 该长大了吧? 走进你的那一天, 懵懵懂懂看不清前方的路, 在你蓬勃的朝气中, 我如快乐的蜜蜂, 每一天都满怀喜悦, 期待甜蜜的收获. 我在不知不 ...

  5. Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法)

    Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法)                                                                    ...

  6. TZC 高中信息技术(Python)必修题单————题解

    http://www.tzcoder.cn/acmhome/news.do?method=newsDetail&id=2c903bb4799c4f3b0179a7967ac309e1 高中课本 ...

  7. python如何绘制蜘蛛图_python常见的十种可视化图库方法展示

    一 散点图 # python可视化操作 import numpy as np import pandas as pd import matplotlib.pyplot as plt import se ...

  8. PTA基础编程题目集 之 Python解法(7-8)

    PTA基础编程题目集 之 Python解法(7-8) 7-8 超速判断 (10分) 模拟交通警察的雷达测速仪.输入汽车速度,如果速度超出60 mph,则显示"Speeding",否 ...

  9. 用python生成无人机影像的正射影像、数字高程模型以及三维建模

    OpenDroneMap   OpenDroneMap 是一个开源的航拍图像处理工具,可以把航拍图像进行点云.正射影像和高程模型等处理,也可以做3维重构,生成3维模型.简直是个神器,做出来的效果和pi ...

最新文章

  1. 网站ui的配色有哪些需要注意的?
  2. 5 种将死的编程语言!
  3. jquery.autocomplete修改 实现键盘上下键 自动填充
  4. puppet之判断和class
  5. CentOS下SNMP的安装与使用
  6. 【数据结构-栈】C语言实现顺序栈基本操作
  7. 电力拖动(工厂电气控制)实验装置
  8. 2.1.5、会员权限管理系统应用
  9. excel二维表转化为一维表
  10. 发送网页内容到onenote_将网页中的信息快速添加到OneNote笔记本的方法
  11. 移动电子商务:五个技术标准与Trustonic TEE解决方案【转】
  12. HDU 2389 Rain on your Parade(二分匹配+Hopcroft-Carp算法模板题)
  13. windows下对python的pip更新到最新版本
  14. 部分仿真软件对比介绍
  15. MySql学习笔记(2)--数据库操作及数据管理
  16. 概念肆虐:凭什么让“IPv9”横行无忌?
  17. DLL文件是什么?有几种调用方式?
  18. navicat 使用代理跳板机(nginx)连接远程服务器mysql数据库
  19. (带手机版数据同步)新闻文章资讯博客网站源码织梦模板
  20. sql注入原理及解决办法

热门文章

  1. cgos客户端Linux,GNU Go
  2. 【开源方案】USB一转四 USB HUB集线器
  3. CListCtrl控件使用指南(大全)
  4. Android数据存储、文件存储、SQLite数据库简单使用、 sharedPreferences存储(五)
  5. [附源码]java毕业设计关爱留守儿童志愿者管理系统PPT
  6. android p 华为手机多少钱,Android P正式发布,华为四款机型将吃上第一口“馅饼”...
  7. 算法讲解:二分图匹配
  8. 这是三个最热门的梵文纹身设计...
  9. 电脑开机了,显示屏无信号怎么办?
  10. 【CodeForces 611D】Ancient Prophesy