集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Python >

python3,Facebook向Python3迁移的过程

发布者: 成都python爬虫培训     浏览次数:     发布时间:2018-08-01 09:01:20

你做一件事最对可以坚持多久?让你每天甩双臂100下 ,3个月后你还会在甩吗?有人说用双手捶打腿部,可以促进血液循环,从而达到减肥的目的,试问你可以坚持每天捶打按摩100下吗?我们...

        你做一件事最对可以坚持多久?让你每天甩双臂100下 ,3个月后你还会在甩吗?有人说用双手捶打腿部,可以促进血液循环,从而达到减肥的目的,试问你可以坚持每天捶打按摩100下吗?我们都知道坚持的力量,但是没有几个人可以做到。成都python爬虫培训:看Facebook向Python3迁移的过程,让我们再次感受坚持带来的震撼!


        成都python爬虫培训:python培训,python3,Facebook向Python3迁移的过程


        Python3的使用量在过去几年有了明显增加,但它仍有很长的路要走。使用Python的大公司倾向于在其基础架构上运行Python2.7代码,Facebook也不例外。在PyCon2018大会上,Facebook的工程师贾森‧弗里德讲述了该公司在过去四年左右的时间里,Python3从几乎无人问津到成为该公司主流Python版本的全过程。他在帮助公司实现这一目标中发挥了重要作用,他的演讲(视频地址:https://www.youtube.com/watch?v=H4SS9yVWJYA)为其他公司如何迁移Python版本提供了一些思路。


        弗里德2011年进入Facebook,工作不久,他就意识到必须得自学Python,因为Python写的代码更容易通过代码评审。后来,他发现自己成了推动Facebook使用Python3的主要动力。他说从未刻意计划过,只是因为Python用得多了自然产生的结果。


        贾森‧弗里德最初在内部Python社区中非常活跃,他经常是第一个站出来解决问题的人。最终他在Facebook成了有名的(或者说“臭名昭著的”)Python程序员,因为当他看到别人的Python代码有问题时,他会不经许可直接修改。这在Facebook行之有效,因为这里并没有真正意义上自上而下的控制机制,每个人都有权利修改代码。随着时间推移,他修改的代码越来越多,在公司内部的Python社区建立起了威信,这对他日后主导Python版本的迁移起到了很大作用。


        他说,要在“整个Facebook公司层面”上改变Python版本需要相当长的时间,还需要使用很多“外交”手段。他讲述了他和几个工程师利用空闲时间,在没有任何权力主导的情况下让Python3成为了Facebook的主要Python版本。


        2013年,在Facebook内Python3.3得到了初步的支持。这是向构建系统添加Python3支持的一部分。但是这个任务因Facebook库不支持Python3被阻止,而如果构建系统不支持Python3,Facebook库就不可能支持Python3。这就像《第22条军规》里描述的矛盾军规一样,Python3虽然“可用”,但在Facebook 的环境中得不到任何支持。


        另外,2013年时Facebook内部还有很多人对Python3抱有消极情绪。大部分人认为公司将永远停留在Python2.7版本上。还有人建议完全换成另一种语言。弗里德也曾表示(在内部社区中)Python3永远不会出现在Facebook。只有一个人向他提出质疑,并建议他做些事情来改变这种情况,虽然当时他忽略了这个建议,但这个想法却留在了他的脑海里。


        一线希望


        他说,实际上当时还是有一线希望的。2013年1月,当时Facebook正在使用的lint工具需要从_ future_模块导入四个功能( print_function、division、absolute_imports 和 unicode_literals)以延长Python2代码库的使用寿命。他们在lint工具有提示的地方导入这些包,这样可以更容易将模块转为Python3。


        用于序列化和远程过程调用的Apache Thrift框架在Facebook“无处不在”。由于它仅支持 Python2,所以成为Python版本迁移的最大障碍。但是,Thrift团队发起的一个有关Thrift新特性的问卷调查显示,开发者普遍希望能够添加Python3支持。弗里德投了赞成票,但并不是跟风,他认为Python2接口需要重构,因为它看起来好像是用Java编写的。


        当他看到吉多•范罗苏姆在旧金山的 Yelp 公司谈论一个叫做“Tulip”(最终成为了 asyncio 模块)的东西时,他的想法开始转变。他一直是Python异步编程的支持者,但总是遇到框架(如 Twisted、gevent)差异而导致的碎片化问题。而Tulip让可以异步 I/O可互操作而不是碎片化。在范罗苏姆的谈话结束之前,他与Thrift 团队沟通,表示Thrift应该直接支持Tulip,而不是等待Twisted、gevent 和其它框架迁移到Python3。几天后,Thrift团队发布了一个路线图,其中就有对Python3和Tulip的支持。


        Thrift团队在2014年初推出了这两项新特性,但此后六个月并没有什么动静。用户并没有对此作出反应,实际上他们不关心,甚至根本不知道已经发生了这些变更。


        新项目


        2014年8月,他开始重写一个服务,并计划使用gevent 和Python2,但他后来才意识到,如果这么做的话,在完成这个项目时它就过时了。为了有所改变,需要有人成为第一个做出改变的人。要在Facebook推动使用Python3,那个人非弗里德莫属。他说,“如果你希望你所在的组织使用Python3,我想起主导作用那个人应该是你。”


        于是他使用Python3开始了他的项目,可想而知,他面对的是一个“一塌糊涂”的局面。当时Facebook没有人用Python3,构建系统不支持他的代码,而且所有第三方包仅适用于Python2。当他最终修复了错误允许服务被构建时,又会在运行时失败——在Facebook系统中设置服务入口点的代码报错。


        为了让代码能够正常运行,他必须修复所有问题。他重新构建了数百个第三方包,这样它们就可以同时支持两个版本的 Python,而且他必须让所有内部库可以兼容 Python2 和Python3。但是,每天都会有人将仅支持Python2的变更代码提交到他的依赖包中。他厌倦了反复去修复问题。一种解决方案是强制兼容Python3,而这在Facebook根本不可能。但是,如果你表现得好像有某种权威时,人们会渐渐相信你真的有这种权威。


        他动用了很多关系把Pyflakes(一个检查代码语法的 lint 工具)添加到构建过程中。他能够证明添加它是有道理的,因为虽然已经有了PEP8标准的lint工具,但Pyflakes 可以解决其他额外的代码质量问题。此外,Pyflakes几乎没有误报,所以它不会惹火开发人员。他做了一些设置,让Pyflakes能够扫描所有需要审查的代码,先是Python2,然后是Python3。这有助于将检查兼容性的工作扩展至所有开发人员,而不仅仅是他自己做这项工作,这让他的项目取得了进展。


        在刚开始,他必须花费大量的时间向人们解释“lint工具是没有错的”,并且让代码能够在Python3上运行是有价值的。如果开发人员开始觉得迁移到Python3是件困难的事,他们就会回到“让我们永远留在Python2”的心态。他让开发人员可以轻松地在Python 3环境中运行代码。本来有更轻松的解决方法,那就是“关闭lint工具”,他没有抱怨这一切,只是坚持这样做,所以大多数开发人员开始按他的方法做了。


        培训


        虽然克服了一些困难,但在Facebook扩大Python3地盘的工作进展甚微或毫无进展。他加入了为Facebook新员工进行Python编程培训的团队。使用lint工具的程序员希望代码能兼容Python2和Python3,但他希望兼容代码仅用于遗留项目,而新项目应该用Python3 开发。他再次亲自动手做出改变:2015 年,他修改了对新员工的Python培训内容,表示Facebook总有一天会转向Python3,只编写Python2代码是没有意义的,因为未来还得重写。他教导新员工,所有代码都应该与Facebook基础架构和构建系统一致,如果不是,他们应该提交错误报告或尝试自行修复。这样,新员工开始在工作中使用Python3,这就是进步的开始。“奇怪的是,事情就这么发生了”。


        2015年1月,他终于交付了他的项目。那一年他花了很多的时间告诉人们Python3有多好,为什么他们应该尽可能地使用Python3。一年来,很多和他共同推行Python3的同事在公司中都出了名。


        其中一位盟友是尤卡兹·兰加,他“说服了Instagram团队向Python3迁移”。 2016年,弗里德和兰加在Facebook组建了一支全新的团队,在公司内部培训Python,他们称之为“滑稽漫步团”。虽然只有两个人,但毕竟是一个“Python 团队”,于是他之前提到的“权威”开始起作用了:人们认为他们可以在Facebook做出有关Python的决策。


        2016年,他发现Python3的使用量增长缓慢但稳定。会议上有人提到它,经常有新项目使用它。即使Python3不是项目的默认选项,Facebook内部此时对Python3的看法也已经发生了变化。2016年5月,弗里德表示要将构建系统的默认Python语言切换到 Python3,他的这一提议几乎得到了绝对支持。几天之后,他完成了切换,切换之后并没有带来任何不良影响。


        2016年底,有一个项目团队发表了一篇文章,其中介绍了切换到Python3的结果。开发人员将Python2写的代码换到Python3环境,只是做了一些必要的修复,结果代码的运行速度提高了40%,而且仅用了一半的内存。这打破了弗里德之前听到的一个传言:Python3比Python2慢。早期版本的Python3可能是这样,但现在肯定不是,他说道。


        好事情发生


        2017年初,因为Instagram完成了向Python3的迁移,Facebook收获了迁移带来的好处。Python版本升级原来并不可怕,反而带来了新的功能。Facebook的开发人员现在可以使用新的静态类型或asyncio等工具。“在Facebook公司使用Python语言又开始变得很有趣了”。


        现在的问题是,每个人都在问什么时候可以停止支持Python2。当一个库或模块需要Python2支持时,通常会听到开发人员询问是否可以直接升级到Python3。而几年前,情况是完全相反的。“哦,世界真美好啊!”


        他展示了一张Facebook的Python服务入口点随时间变化的图表,从2015年第三季度开始,那个时候只有四个Python3服务入口点。截至2016年年中,当切换到默认使用Python3时,Facebook已经有4%的服务入口点使用了Python3。2018年3月,这一比例超过50%。5月中旬,当他发表这次演讲时,运行Python3的服务入口点比例已达55%。在Facebook,只能在 Python2上运行的代码现在处于尴尬的境地,弗里德说道。


        然后他回顾了这个过程。他说,你不仅仅是去创新;你还必须通过“亲力亲为让人看到你想要的变化”来引导开发者;你应该寻求别人的帮助,即使他们不知道能帮上什么忙,这也是lint工具和单元测试模块率先迁移到Python3的原因。培训新员工去实现你未来的目标是很重要。一旦你到达目标,或者掌握到达目标的方法,要通过享受“好东西”来庆祝:用Python3写一些“很棒的东西”。介绍如何使用新功能会促使其他人也想要使用Python3。


        最后,他还回答了观众提出的一些问题。有人问,如何在传统、等级分明的组织中实现演讲中所说的目标。弗里德认为,实际上这可能会更容易一些,因为你不需要说服成千上万的开发者,只需要让管理层意识到这件事情的好处就可以了。如果在文化保守的组织中,这可能很难,但专注于代码质量改进可能对此有所帮助。另一个问题是关于整体代码,而不是多个入口点,对于这个问题,弗里德建议大家看看 PyCon2017上的一个Instagram主题演讲(链接:https://www.youtube.com/watch?v=66XoCk79kjM)。


        弗里德的演讲中还提到了很多其他组织可以借鉴的东西,但有一个倡导者和坚韧的领导者非常重要。一家公司要实现这样的改变就得有像弗里德这样的人。
AI人才的薪资让成都python爬虫培训小编瑟瑟发抖,有技术的人真的可以为所欲为,壕到没朋友。如果看到这,你再也按奈不住一颗想要暴富的心。就赶紧报名达内7月python人工智能免费训练营吧,全程大咖级讲师亲授,带你从小白向行业专业人才进阶,骚年,你的每一次犹豫可能就是和高薪在擦肩而过,心动不如行动哦!
(责任编辑:杨老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:绵阳市涪城区临园路东段68号富临大都会7栋3单元9层12号

联系电话:15023458194

公交路线:富乐路口凯德广场(10路;29路;3路;15路;11路;15a路;71路)

校区地址:成都市锦江区东大街紫东楼段35号明宇金融广场19楼1903室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街紫东段35号明宇广场2306

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市成华区建设路10号万科钻石广场B座5楼

联系电话:15023458194

公交路线:建设路中(6路;14路;42路;72路;76路;1010路;)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

20016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56