Python 类型系统的特色是拥有强大、灵活的类型操做. 维基百科上对此做出的阐述.python
而存在一个不争而有趣的事实是, Python 是比Java更增强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色地带. 另外一方面,现代的 Python 拥有一个统一的强类型系统, 其中什么都没有(None) 的类型是明确指定的. 更进一步的,JVM自身也是动态类型的,由于能够把它的 根源 追溯到由Sun所收购的Smalltalk VM的一个实现.程序员
Python的类型系统 很棒,但要提供给企业级使用,目前仍然还有许多更重大的事项须要关注.web
欢迎加入群:725479218,技术分享,学习交流,资料共享编程
首先是有一个重要区别: Python 是一门编程语言,而不是运行时环境. Python 拥有几个实现:性能优化
CPython是参考实现, 且也是普遍发布和使用的实现.网络
Jython是Python用于JVM的是一个成熟的实现.架构
IronPython是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .并发
PyPy是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性. 每个运行时都有其本身的性能特色, 并且他们自己也不慢. 这里更重要的地方在于不能错误地把一个性能指标分派到一门编程语言智商. 应该老是把该评估用在一个应用程序运行时上面,最好是针对一个特定的使用场景. 清楚了那些事项以后,下面就是一些有Python提供的小项,体现其重要的性能优点:框架
把 NumPy 用做 Intel 的 MKL SIMD接口less
PyPy的 JIT 编译能 达到比C还快的性能
Disqus 能在一样的100个盒子上容纳两亿五千万到5亿用户
诚然,这些都不是最新的列子,只是我我的的最爱罢了. 这将很容易扯到高性能Python以及独立提供的运行时这些广阔的领域. 咱们不该只是专一于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的广泛影响上面, 特别是在一种企业级环境之下.
C++ vs Python,. 两种语言在同一个输出下的对比.
给定足够的时间,一个循规蹈矩的开发者只会按照下面这种通过论证的方式来编写精确高效的软件:
大规模有许多定义,但不管怎样,YouTube是个大规模网站。每个月UV超过十亿,每分钟上传的视频时长超过100小时,占用互联网带宽的20%,全部这一切都以Python做为核心技术。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大规模的例子,这些证实大规模不只仅是可能:它是一种模式。
成功的关是键简单性且一致性。CPython,Python的主要虚拟机,其最大限度地放大了这些特性,从而演变出了一个精确可测的运行时。人们很难发现 Python程序员关心垃圾的收集暂停或应用地启动时间。拥有强大的平台和网络支持,Python其自己天然而然的智能水平可扩展,BitTorrent就是其充分的体现。
此外,规模化主要涵盖测量和迭代。Python是以分析和优化为要义创建的。看Myth #6了解更多Python如何垂直拓展的细节。
除了偶尔叫嚣性能和规模化的问题,有人想提的技术些,”Python缺少并发,”或者,”GIL怎么样?”若是几十个反例仍不足以支持Python水平及垂直拓展规模的能力,那么再更深地解释CPython实现细节也不会有帮助,因此我会简短些。
Python拥有强大的并发原语,包括generators, greenlets, Deferreds, 和futures.。Python有优秀的并发框架,包括eventlet, gevent,和Twisted。Python在定制运行时尚投入了惊人的工做量,包括Stackless和 PyPy。全部烦人这些和更多代表,根本不存工程师们在Python并发编程方面的缺憾。同时,全部这些都正在被正式的在企业生产环境中支持或使用。例如,请参考Myth #7。
全局解释器锁,或称GIL,是Python在大多数应用场景下的性能优化,也是几乎全部CPython实现代码的开发上的基础优化。GIL使得Python能够很便利地使用操做系统的线程或轻线程(一般指greenlets),且不影响使用多进程。更多相关信息,请看该主题的Q&A列表,以及Python文档中的介绍。
在PayPal中,一个典型服务的部署须要多台机器,多个进程,多个线程,以及一个数字很是庞大的greenlets,至关于一个很是强大可扩展的并行环境(见下图)。在大多数的企业环境中,团队更倾向于往更高层次过分,谨慎并注重灾难恢复。然而,在某些状况下,每台机器天天Python服务仍然处理数以百万计的请求,并且轻松处理。
一个基于单一worker的协同异步架构草图。最外层的盒子是进程,下一个层次为线程,这里这些线程都是轻线程。操做系统处理线程间的抢占,而I/O异步协同合做。
事实上,如今使用 Python 的 web 开发者的确没有使用 PHP 或者 Java 的 web 开发者多。这可能主要是因为企业需求和教育之间的相互做用致使的,不过 教育领域(教学所使用的编程语言)的趋势使得状况可能产生变化 。
也就是说,使用 Python 的开发者并不稀缺。如今全世界有数百万使用 Python 的开发者。已有几十个Python 技术大会、 StackOverflow 上成千上万的 Python 内容问答、雇佣大量使用 Python 的开发者的大企业好比 YouTube 、 美国银行( Bank of American )和 LucasArts/Dreamworks 等等,这些都显而易见地证明了这一点。在 eBay 和 PayPal 咱们一直保持拥有几百位使用 Python 的正式开发者,这是怎么作到的呢?
那么,当一个项目被建立时为何它会被首推?对于孩子来,大学生和教授们来讲,Python做为第一门程序设计语言是很是易于学习的。在eBay,仅仅须要一个星期,一个新的Python程序员就能展现一个真正的成果,而且他们开始散发光芒经常只要2-3个月,经过Internet的宝藏(互动式教程,书,文档和开源代码库)一切皆有可能。
另一个重要的考虑因素是,项目使用Python会更简单,它不会像其余项目那样须要那么多的开发者。在谬误6和谬误9中提到的那样,在Python项目中,学习像Instagram那样的高效团队是一个常见的比喻,而且这确实是咱们在eBay和PayPal的经验。
Myth #7 讨论了大规模运行Python的项目,但开发Python大规模项目是什么状况呢?正如在Myth #9中提到的,大多数Python不被人看好。 然而Instagram在其被亿元美金收购当天达到千万的点击量,而整个公司只有十几我的。Dropbox在2011年只有70个工程师,其余团队更少。因此,Python适合大规模团队吗?
美国银行实际上有超过5000的Python开发者,一个单独的项目超过一千万行Python代码。JP摩根也经历了相似的转变。YouTube也有数千的开发者和数百万行的代码。大规模产品和团队天天都在使用Python,由于它具备良好的模块化和封装特性,在特定方面许多的大规模开发建议是一致的。工具,强大的惯例以及代码审查促使了项目规模化管理的现实。
幸运的是,Python发展于上面所提到的好的奠定。咱们在检查执行使用pyflakes以及其余工具进行Python代码的静态分析,正如坚持PEP8——Python语言的基础风格指南。
最后,应该指出的是,除了调度加速Myth #6以及#7中所提到的,使用Python的项目一般须要更少的开发者。咱们常见的成功案例中,使用Java或C++的项目一般有3-5开发者耗时2-6个月,最终由单一的开发者在2-6周(或小时,由于这些缘由)完成项目。
有点像奇迹,但倒是现代发展的事实,但其每每出自一个竞争激烈的行业。
##一种干净的状态 这些谬误可能只是消遣。讨论这些谬误仍然很活跃的和受启发的,包括内部和外部, 由于隐含在每个谬误里的都是一个Python的优点的认识。 并且, 记住这些看似乏味的表现和麻烦的问题是稳步成长的表露, 并稳定地增加兴趣促进教育和持续地工做。 在这里,但愿能扑灭一场充满火焰的战争,而且使得能真正去谈论工做与Python的实现。
python学习交流群:725479218