python⼩项⽬案例-python简单项⽬实例
语⾔多元化是PayPal编程⽂化中⼀个重要的组成部分。在C++和Java长期流⾏的同时,更多的团队选择了Jva和Scala。同时,Braintree 的收购也引⼊了⼀个久经世故的Ruby社区。Python作为⼀门特别的语⾔,在eBay和PayPal有很长的历史。⽽且其流⾏程度依然有增不减。
eBay的开发者⽀持Python这个应⽤于基层领域多年的语⾔。甚⾄在eBay管理层官⽅⽀持Python以前,技术⼈员就开始使⽤Python。我在⼏年前加⼊PayPal并选择Python来写内部应⽤,然⽽,我却发现了PayPal中将近15年以前的Python代码。
⽬前,Python ⽀撑着 超过50个项⽬, 包括:
功能和产品型, 例如 eBay Now 和 RedLaser运营和基础设施型**, 从开放的 OpenStack 到专有设施中间层服务和应⽤型**, 例如 PayPal ⽤来设定价格以及检测⽤户可⽤功能的那个(服务/应⽤)监测代理和接⼝*型*, ⽤于涉及到部署和安全的⼀些⽤例批处理任务*型*, 例如数据导⼊,价格调整,及其它项⽬以及不计其数的开发者⼯具
在接下来的⽂章⾥我将详细介绍那些使得 eBay 和 PayPal 的 Python ⽣态系统从2011年的不超过25个⼯程师到2014年超过260个⼯程师所使⽤的技术和举措。对于本⽂,我则会专注于10个不得不予以揭露的关于 eBay 和 PayPal 的企业环境的谬误。python基础代码作业
谬误 #1: Python 是⼀门新语⾔
伴随着所有的初创公司正在使⽤它以及孩⼦们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Java 4年. ⽬前⽐较有著名的很早就使⽤ Python 的例⼦是在1996年: Google 的第⼀个成功的⽹络爬⾍。
如果你对于长长的 Python 历史⽐较好奇,Python 的作者 Guido van Rossum 已经为你准备好整个故事。
谬误 #2: Python 没有被编译
不像 C++ ⼀样需要⼀个独⽴的编译器⼯具链,Python 实际上被编译成了字节码,和 Java 或者许多其他的编译型语⾔⼗分相似。更进⼀步的编译过程,如果有的话, 取决于运⾏时环境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的进程式虚拟机(process virtual machine)。参考 谬误 #6 来了解更多。buttons歌曲
⼀条在 PayPal 以及其它地⽅的通⽤原则就是,(应⽤的)安全性不能依赖于代码的已编译状态。更为重要的是加强运⾏时环境的安全,因为实质上每种语⾔都有⼀个解码器,或者能被拦截并导出受保护的状态。参考下⼀条谬误来了解更多的 Python 安全性问题。
谬误 #3: Python 不安全
轻量级 Python 的亲和⼒可能使他看起来不怎么可怕,但是这⾥直觉很⼤程度上是受到了误导的. 安全的⼀个核⼼原则就是尽可能让呈现的⽬标更⼩. ⼤系统是违背安全原则的,因为他们趋向于 使⾏为过渡集中化, 并且也 让开发者难于理解. Python 通过倡导简洁化来边缘化这些恶⼼的问题. 更有甚者, CPython 通过让⾃⼰成为⼀个简单、稳定并且易于审核的虚拟机来使这些问题得到解决. 事实上,近期 Coverity Software 的⼀个分析结果显⽰ CPython 得到了他们的最⾼质量评级。
Python 还拥有⼀系列可扩展的开源、产业标准化的安全库序列. 在PayPal, 我们把安全和授信看做是重中之重, 我们发现 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们⾃⼰的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求。
这些诸多的原因,使得 Python 成为PayPal(和eBay)的应⽤程序安全团队在某些业务中最快的选择. 这⾥有把Python⽤在PayPal的安全第⼀环境中的⼏个以安全为基础应⽤程序:
创建安全代理,以促进密钥的轮换以并巩固加密实现同业界领先的 HSM 技术集成为缺乏兼容性的技术栈构建受TLS保护的封装代理为我们内部的互相认证计划⽣成键和证书开发主动的漏洞扫描器
另外,还有⽆数存在安全隐患的⽤Python构建,⾯向操作的系统, 诸如防⽕墙和连接管理. 未来,我们⼀定回去深⼊的整合PayPal Python 的安全事项.
谬误 #4: Python 是⼀门脚本语⾔
Python 确实可以⽤来编写脚本,并且因其简单的语法、跨平台并且⽆所不在于 Linux, Macs, 和其它Unix 机器⽽成为这个领域的领跑者之⼀。
事实上, Python 可能是常规⽤途编程语⾔中最灵活的技术. 以下是⼀些实例:
电信基础设施 (Twilio)⽀付系统 (PayPal, Balanced Payments)神经科学和⼼理学 (许多, 许多, 例⼦)数值分析和⼯程 (numpy, numba, 以及 更多其它)动画(LucasArts, Disney, Dreamworks)游戏后台 (Eve Online, Second Life, Battlefield, 以及 其它很多)Email 基础设施(Mailman, Mailgun)媒体存储和处理 (YouTube, Instagram, Dropbox)操作和系统管理 (Rackspace, OpenStack)⾃然语⾔处理(NLTK)机器学习和计算机版本 (scikit-learn, Orange, SimpleCV)安全性和渗透性测试 (很多很多 以及 eBay/PayPal⼤数据 (Disco, Hadoop support)如理 (Calendar Server, 它 驱动了 Apple iCal)搜索系统 (ITA, Ultraseek, 还有 Google)Internet 基础设施 (DNS) (BIND 10)
更别提⽹站和web服务了,那些都不在少数. 事实上,PayPal⼯程师看起来像是有兴趣致⼒于基于Python的web特性,⽐如 YouTube 和Yelp. 如果对Python成功案例的更⼤清单感兴趣,那就看看官⽅的清单吧.
谬误 #5: Python 是弱类型的
Python 类型系统的特点是拥有强⼤、灵活的类型操作. 上对此作出的阐述.
⽽存在⼀个不争⽽有趣的事实是, Python 是⽐Java更加强类型的. Java 对于原⽣类型和对象区分了类型系统,它让null存在于⼀个灰⾊地带. 另⼀⽅⾯,现代的 Python 拥有⼀个统⼀的强类型系统, 其中什么都没有 的类型是明确指定的. 更进⼀步的,JVM⾃⾝也是动态类型的,因为可以把它的 根源 追溯到由Sun所收购的Smalltalk VM的⼀个实现。
Python的类型系统 很棒,但要提供给企业级使⽤,⽬前仍然还有许多更重⼤的事项需要关注。
谬误 #6: Python 速度慢
⾸先是有⼀个重要区别: Python 是⼀门编程语⾔,⽽不是运⾏时环境. Python 拥有⼏个实现:
CPython是参考实现, 且也是⼴泛发布和使⽤的实现.Jython是Python⽤于JVM的是⼀个成熟的实现.IronPython是 Microsoft 针对其⾃家的通⽤语⾔运⾏时——⼜名 .NET,实现的Python .PyPy是⼀个正在⽇趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.每⼀个运⾏时都有其⾃⼰的性能特点, ⽽且他们本⾝也不慢. 这⾥更重要的地⽅在于不能错误地把⼀个性能指标分派到⼀门编程语⾔智商. 应该总是把该评估⽤在⼀个应⽤程序运⾏时上⾯,最好是针对⼀个特定的使⽤场景。
清楚了那些事项之后,下⾯就是⼀些有Python提供的⼩项,体现其重要的性能优势:学了sql一定要做程序员吗
oracle 10g 下载 win7 64位把 NumPy ⽤作 Intel 的 MKL SIMD接⼝PyPy的 JIT 编译能 达到⽐C还快的性能Disqus 能在同样的100个盒⼦上容纳两亿五千万到5亿⽤户
诚然,这些都不是最新的列⼦,只是我个⼈的最爱罢了. 这将很容易扯到⾼性能Python以及独⽴提供的运⾏时这些⼴阔的领域. 我们不应只是专注于解决单个特殊的案例, ⽽是应该把注意⼒放在对开发⼈员在 最终产品性能 ⽅⾯的⽣产⼒的普遍影响上⾯, 特别是在⼀种企业级环境之下。
C++ vs Python,. 两种语⾔在同⼀个输出下的对⽐.
给定⾜够的时间,⼀个循规蹈矩的开发者只会按照下⾯这种经过论证的⽅式来编写精确⾼效的软件:
设计实现⼀个可以正确完成任务的软件,包括开发单独的测试测试性能,明确瓶颈优化,根据测试和Amdahl法则,并且利⽤Python与C的渊源
虽然这听起来很简单,但是即使是⽼道的⼯程师,这依旧是⼀个⾮常耗时的过程。Python设计之初就考虑到了这⼀套开发流程。根据我们的经验,通常C++和Java项⽬完成⼀次迭代流程的时间,够Python项⽬完成三次迭代流程。今天,PayPal和eBay中不乏有Python项⽬使⽤更少的代码战胜了同类C++和Java项⽬,这多亏了快速的开发使得仔
细的裁剪和优化变得可能。
Myth #7: Python⽆法做到⼤规模
⼤规模有许多定义,但⽆论怎样,YouTube是个⼤规模⽹站。每⽉UV超过⼗亿,每分钟上传的视频时长超过100⼩时,占⽤互联⽹带宽的20%,所有这⼀切都以Python作为核⼼技术。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python⼤规模的例⼦,这些证明⼤规模不仅仅是可能:它是⼀种模式。maven本地仓库和远程仓库
成功的关是键简单性且⼀致性。CPython,Python的主要虚拟机,其最⼤限度地放⼤了这些特性,从⽽演变出了⼀个精确可测的运⾏时。⼈们很难发现 Python程序员关⼼垃圾的收集暂停或应⽤地启动时间。拥有强⼤的平台和⽹络⽀持,Python其本⾝⾃然⽽然的智能⽔平可扩展,BitTorrent就是其充分的体现。
此外,规模化主要涵盖测量和迭代。Python是以分析和优化为要义建⽴的。看Myth #6了解更多Python如何垂直拓展的细节。
Myth #8: Python缺少好的并发⽀持
除了偶尔叫嚣性能和规模化的问题,有⼈想提的技术些,”Python缺乏并发,”或者,”GIL怎么样?”如果⼏⼗个反例仍不⾜以⽀持Python⽔平及垂直拓展规模的能⼒,那么再更深地解释CPython实现细节也不会有帮助,所以我会简短些。前端jquery选择器
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异步协同合作。
谬误 #9: Python 程序员很稀缺
事实上,现在使⽤ 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 #10: Python不适应于⼤项⽬
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周(或⼩时,因为这些原因)完成�...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论