设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

如何为使用Python语言而辩论

2015-2-5 22:48| 发布者: joejoe0332| 查看: 1835| 评论: 0|原作者: douxingxiang, Ev4n, 无若, BruceLinxu|来自: oschina

摘要: 我们看到,使用Python的用户很可能在未来保持高位,但是Python是否会被用到尽可能多的项目中是不能保证的;用户(users)数目很多而且稳定,但是项目中Python的用处(use)并不确定。 ...


CPython + Cython

  如果你在使用 C 拓展模块,CPython 就会使你最好的选择(可能你不知道这个术语,CPython 是你可以在 python.org 获得的解释器)。对大多数的情况而言性能至少合理些– 因为某些原因,一些人认为Python 开发团队不关心性能,这个一个谎言 –  而且即将会成为新的特性,因为 CPython 同时担当着语言规范的作用。


  如果认为你的一些内循环代码确实需要提高些速度, Cython 是 CPython 的选择。Cython 会尽可能的将你的 Python 代码编译成 C 拓展代码。有若干种支持的方法可以产生更好的 C 代码,所以这取决于你需要怎样的 Cython 特性。Cython 同时也使写出 C 拓展模块更加简单(但要继续读下去,除了CPython 还有其他的选择)。


PyPy + cffi

  如果你不依赖于已存在的 C 拓展模块,PyPy 会给你提供总体上最好的性能。它的JIT非常好而且它的团队欢迎受到使用 CPython 并且运行更快的代码的挑战,因为他们痛恨在 speed.pypy.org 中显示的那么慢。实话说,除非PyPy不支持你真的想用的那个版本的 Python – 因为 PyPy 确实会落后2个版本, 比如pypy3 现在支持 Python 3.2 然而 3.4 是最新的 CPython 发布版; 它们期盼在这个问题上能得到帮助(donation) – 我只能考虑不使用PyPy因为你依赖于已存在的C拓展模块C( numpy 是最常见的问题,虽然 PyPy is looking for donations 可修复这个问题)。


  但这不意味着,如果想封装一些C代码就用不了PyPy。PyPy项目还有另外一个子项目cffi,这个项目的目的是使Python代码也可以利用封装的C代码。使用cffi的关键好处在于,一旦你使用了cffi,C代码就可以用于CPythonPyPy(我认为IronPython和Jython也在添加对cffi的支持)。所以如果你在封装C代码,我强烈建议你看下cffi,而不是手动写C扩展模块或者使用Cython,这样你有更好的Python实现的支持,还能使用PyPy。


Numba

  如果你在做数值相关的工作,你肯定应该考虑Numba这个选择。在科学计算上,经济学家注意到了它的性能。虽然在普通的Python编程上,它不能帮到什么忙,但是如果在Python非常强大的科学计算栈中用到了numpy或者其他模块,Numba使用LLVM来进行JIT肯定会有帮助。


未来的 Python

  考虑到所有内容,Python肯定不是停滞不前的(Go也没有,比如它们都在忙于用Go重写编译器和将连接器以外的东西转移进编译器来获得更快的编译速度)。Python 的未来看起来还是光明的。


生产率

  Python 是一种在进化的语言。不像 Go,Python 乐于改变该语言,甚至是以永远不再向后兼容的方式。这意味着Python会比Go更快的速度变得更加高效(虽然在Go 2开发之前Go的团队对该语言进化持哪种观点还是未知的)。


  在工具方面,标准化的 函数注解 是为了声明类型。 这是在 PyCon 2014 语言峰会期间提出的,针对函数参数和返回值,里面提到有大量的项目现在想要有一种声明预期类型的方法,使用函数注解考虑到了在某些方面的标准化,最终可能对标准库函数也会是有用的。在pytypedecl的邮件列表上的讨论还没有开始,但是我知道PEP大概是要开始了。不仅仅是对像Cython和Numba这样的项目在什么地方使用打印信息,还包括在诸如代码分析,重构等的时候使用。


性能

  长远看来,有两个项目可以帮助提升Python的性能。一个是新的Python虚拟机Pyston。尽管Pyston刚现时间但它使用LLVM的JIT(是的这不由得让人想起Unladen Swallow,然而LLVM的JIT已经比它在2009年时好很多了这个目还是颇有希望果的)。


  其PyPy-STM才是真正能够让我兴奋的项目,"STM"表示"软件事"本上PythonGIL的。PyPy-STMPyPy慢大约1.2-3倍,这样的表现已经相当不错了目前他们正在寻找资助,这项作,要实现这个标:使得带有两个线程的PyPy-STM值得PyPy上普遍运行



在黑暗中做出选择

  希望这篇博客传达的不是一个总结, 而是一个关于生产力/性能折衷的方案。  Python已经清晰地拥有了强大的生产力辅助并且没有哪个领域表现不佳,这仍是我选择的语言。如果你发现自己有可能选择Python项目以外的东西, 请一定要停下来思考没有使用Python所带来的生产力损失,然后看看你有各种选项让Python加快执行,这样你再去做一个全面的关于Python是否 可以为你的项目工作的选择。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部