成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Facebook如何在4年間全面轉向Python3?

新聞 前端
過去幾年,Python 3 的采用量明顯增加,但它仍有很長的路要走。采用 Python 的大型公司傾向于在其基礎架構上運行大量的 Python 2.7 代碼,F(xiàn)acebook 也不例外。

 

  策劃編輯 Natalie

  作者 Jake Edge

  編譯 Debra

  編輯 Vincent

  過去幾年,Python 3 的采用量明顯增加,但它仍有很長的路要走。采用 Python 的大型公司傾向于在其基礎架構上運行大量的 Python 2.7 代碼,F(xiàn)acebook 也不例外。在今年的 PyCon 2018 會議上,F(xiàn)acebook 產(chǎn)品工程師 Jason Fried 講述了該公司在過去四年時間里,Python 3 從幾乎無人問津到成為該公司主流 Python 版本的全過程,也展示出 Fried 作為一名工程師的堅持。

  視頻地址:https://v.qq.com/x/page/r07069violt.html

  Jason Fried 現(xiàn)任 Facebook 的產(chǎn)品工程師,在幫助公司實現(xiàn)這一目標方面發(fā)揮了重要作用,他在演講中討論了關于如何解決 Python 版本遷移的一些想法。

  Fried 在 2011 年進入 Facebook 工作,很快,他就發(fā)現(xiàn)需要自學 Python,因為在 Facebook,Python 代碼更容易通過代碼評審。后來,他發(fā)現(xiàn)自己成為推動 Facebook 采用 Python 3 的主要動力。他表示從未特地進行過計劃,只是 Python 用得多了,自然而然產(chǎn)生的結果。

[[234897]]

(Jason Fried)

  Jason Fried 最初因在 Python 內(nèi)部社區(qū)中非常活躍而展露頭角,他經(jīng)常是***個站出來回答問題的人。隨后,他在 Facebook 作為 Python 的支持者而漸漸成名(或者說”臭名昭著“),因為當他看到 Python 代碼中出現(xiàn)問題時,他會未經(jīng)許可就直接上手修改。這在 Facebook 行之有效,因為這里并沒有真正意義上的自上而下的控制機制,每個人都有權利對一個代碼變更做出修改,就像你有權利做出代碼變更一樣。隨著時間推移,他在 Facebook 的內(nèi)部 Python 社區(qū)內(nèi)建立起了威信,這對他日后在 Facebook 順利主導 Python 版本遷移起到了很大的推動作用。

  這是 Fried 演講中提到的關于 Python 3 在 Facebook 從無人問津到占主導地位的完整時間線,可以看到,這個過程花了將近 5 年的時間,實屬不易。

  2013 年(基本支持→負面情緒→希望乍現(xiàn))

  Python 3 永遠不可能出現(xiàn)在 Facebook

  Python 3 在 Facebook 的落地過程非常艱難,一開始遭到內(nèi)部的否定,甚至讓 Fried 一度認為它不可能出現(xiàn)在 Facebook,直到目前超過 55% 的采用率,整個過程非常坎坷。

  他說,要在“Facebook 規(guī)模”上改變 Python 版本這類東西需要花費相當多的時間,并需要使用很多“外交“手段。他講述了他和幾個工程師是如何利用空閑時間,在沒有任何權力的情況下讓 Python 3 成為 Facebook 主要版本的。

  2013 年,F(xiàn)acebook 打算開始初步支持 Python 3,因為他們需要向構建系統(tǒng)中添加 Python 3 支持。但因為 Facebook 庫不支持 Python 3,所以無法向構建系統(tǒng)添加 Python3。而如果構建系統(tǒng)不支持 Python 3,F(xiàn)acebook 庫就不可能支持 Python 3。這就像《第二十二條軍規(guī)》里描述的矛盾軍規(guī)一樣,Python 3 雖然“可用”,但在 Facebook 環(huán)境中得不到任何支持。

  另外,在 2013 年,F(xiàn)acebook 內(nèi)部對 Python 3 抱有很大的消極情緒。總體來說,他們認為公司的編程語言將永遠停留在 Python 2.7 版本。還有人建議完全換成另一種語言。Fried 也曾表示(在內(nèi)部社區(qū)中)Python 3 永遠不會出現(xiàn)在 Facebook。只有一個人向他提出質疑,并建議他做些事情來改變這種情況,雖然當時他忽略了這個建議,但這個想法卻留在了他的腦海里。

  希望乍現(xiàn)

  2013 年,事情出現(xiàn)了轉機。當年一月,當時 Facebook 正在使用的“linter”工具需要從 future 導入 print_function、division、absolute_imports 和 unicode_literals,以延長 Python 2 代碼庫的使用壽命。他們在任何 linter 提示的地方導入這些包,這樣可以更容易將模塊轉為 Python 3。

  用于序列化和遠程過程調用的 Apache Thrift 框架在 Facebook“無處不在”。由于它僅支持 Python 2,所以成為***的障礙。但是,由 Facebook Thrift 團隊發(fā)起的一個有關 Thrift 新特性的問卷調查顯示,開發(fā)者普遍希望能夠添加 Python 3 支持。Fried 投了贊成票,但并不是跟風,他認為 Python 2 接口需要重構,因為它看起來好像 Java。

  當他看到 Guido van Rossum 在舊金山的 Yelp 談論一個叫做“Tulip”(最終成為了 asyncio 模塊)的東西時,他的想法開始轉變。他一直是 Python 異步編程愛好者,但因為框架(例如 Twisted、gevent)之間的差異而變得碎片化。而 Tulip 讓異步 I/O 操作之間可以互操作。在那次演講結束之前,他與 Facebook Thrift 團隊溝通,表示 Thrift 應該直接支持 Tulip,而不是等 Twisted、gevent 和其他框架遷移到 Python 3。幾天后,Thrift 團隊發(fā)布了一個路線圖,其中就有對 Python 3 和 Tulip 的支持。

  Thrift 團隊在 2014 年初推出了這兩項新特性,但此后六個月并沒有什么動靜。用戶并沒有對此作出反應,實際上他們不關心,甚至根本不知道已經(jīng)發(fā)生了這些變更。Fried 還順便引用了中國蓋了房子卻沒人住的例子來說明這種情況,真是讓人哭笑不得。

  2014 年(改變文化→從頭開始→強制推行)

  新項目

  2014 年 8 月,他開始重寫一個服務,并計劃使用 gevent 和 Python 2,但他后來才意識到,如果這么做的話,在完成這個項目時它就過時了。為了有所改變,需要有人成為***個做出改變的人。要在 Facebook 推動使用 Python 3,那個人非 Fried 莫屬。

  于是他使用 Python 3 開始他的項目,可想而知,他面對的是一個”一塌糊涂“的局面。當時 Facebook 沒有人用 Python 3,構建系統(tǒng)不支持他的代碼,而且所有第三方包僅適用于 Python 2。在他修復了所有問題,讓代碼通過編譯后,又在運行時出了問題。

  為了讓代碼能夠正常運行,他必須修復所有問題。他重新構建了數(shù)百個第三方包,這樣它們就可以同時支持兩個版本的 Python,而且他必須讓所有內(nèi)部庫可以兼容 Python 2 和 Python 3。但是,每天都有人會將 Python 2 變更提交到他的依賴項中。他需要不停地修復問題,并對此感到厭倦。一種解決方案是在組織內(nèi)部強制進行 Python 3 合規(guī),但這在 Facebook 根本不可能。但是,如果你表現(xiàn)得好像有某種權力時,人們會漸漸相信你真的有這種權力。

  他動用了很多關系把 Pyflakes(一個 lint 工具)添加到構建過程中。他能夠證明添加它是有道理的,因為雖然已經(jīng)有了 PEP 8,但 Pyflakes 可以解決其他額外的代碼質量問題。此外,Pyflakes 幾乎沒有誤報,所以它不會惹火開發(fā)人員。他做了一些設置,讓 Pyflakes 能夠掃描所有需要審查的代碼,先是 Python 2,然后是 Python 3。這有助于將 Python 3 兼容性擴展至所有開發(fā)人員,而不僅僅是他自己,這讓他的項目取得了進展。

  在剛開始,他必須花費大量的時間向人們解釋“linter 是沒有錯的”,并且讓代碼能夠在 Python 3 上運行是有價值的。如果開發(fā)人員開始覺得遷移到 Python 3 是件困難的事,他們就會回到“讓我們永遠留在 Python 2”的心態(tài)。他要盡量保證開發(fā)人員能夠順利在 Python 3 上運行代碼。

  2015 年(培訓)

  培訓

  雖然克服了一些困難,但在 Facebook 擴大 Python 3 地盤的進展甚微或毫無進展。他加入了為 Facebook 新員工進行 Python 編程培訓的團隊。他希望兼容代碼僅用于遺留項目,而新項目應該用 Python 3 開發(fā)。

  2015 年,他修改了新員工 Python 培訓內(nèi)容,表示 Facebook 總有一天會轉向 Python 3,只編寫 Python 2 代碼是沒有意義的,因為未來得重寫。他教導新員工,所有代碼都應該與 Facebook 基礎架構和構建系統(tǒng)一致,如果不是,他們應該提交錯誤或嘗試自行修復。這樣,新的員工開始在工作中使用 Python 3,這就是進步的開始。“奇怪的是,事情就這么發(fā)生了”。

  2015 年 1 月,他終于交付了他的項目。他花了大半年的時間告訴人們它有多好,為什么他們應該盡可能地使用 Python 3。一年來,很多在 Facebook 致力于推行 Python 3 的盟友在公司中出了名。

  2016 年(Python 3 成為默認編程語言)

  其中一位盟友是Łukasz Langa,他“說服了 Instagram 轉向 Python 3”。 2016 年,F(xiàn)ried 和 Langa 在 Facebook 組建了一支全新的團隊,在公司內(nèi)部培訓 Python,他們稱之為“滑稽漫步團”(The Ministry of Silly Walks)。雖然只有兩個人,但畢竟是一個“Python 團隊”,于是他之前提到的“權威”開始起作用了:人們認為他們可以在 Facebook 做出有關 Python 的決策。

  2016 年,他發(fā)現(xiàn) Python 3 的采用量增長雖然緩慢,但還是有穩(wěn)步的增長。人們在會議上提到它,他還經(jīng)常聽到有新項目在使用它。即使 Python 3 不是默認設置,項目也會選擇使用它,F(xiàn)acebook 此時對 Python 3 的看法已經(jīng)發(fā)生了變化。2016 年 5 月,F(xiàn)ried 表示打算將構建系統(tǒng)切換到默認使用 Python 3,他的這一提議幾乎得到了絕對支持。幾天之后,他完成了切換,切換之后并沒有帶來任何不良影響。

  Fried 表示,2016 年,在 Facebook 中推動 Python 3 項目的只有十個人,其中三個是主要推動者,而且人事流動不斷,做這個項目的很多人都是兼職。

  2016 年底,有一個項目團隊發(fā)表了一篇文章,其中介紹了切換到 Python 3 的結果。開發(fā)人員從 Python 2 換到 Python 3 時只需做出一些修復,運行代碼的速度就提高了 40%,并僅使用了一半的內(nèi)存。這打破了 Fried 之前聽到的一個傳言:Python 3 比 Python 2 慢。早期版本的 Python 3 可能是這樣,但現(xiàn)在肯定不是,他說道。

  2017 年(Instagram 遷移)

  好事情發(fā)生

  2017 年初,F(xiàn)acebook 因為 Instagram 完成了 Python 3 遷移而感受到 Python 3 遷移帶來的榮光。Python 版本升級原來并不可怕,反而帶來了可用的新功能。Facebook 開發(fā)人員現(xiàn)在開始使用新的靜態(tài)類型或使用 asyncio 改造舊服務。“Python 在 Facebook 又開始變得很有趣了”。

  現(xiàn)在的問題是,每個人都在問什么時候可以停止支持 Python 2。當 Python 2 支持庫或模塊出現(xiàn)回歸時,通常會聽到開發(fā)人員詢問是否可以直接升級到 Python 3。而幾年前,情況是完全相反的。“哦,世界真美好啊!”

  2018 年(Python 3 占比超過 55%)

  他展示了一張 Facebook 的 Python 服務入口端點隨時間變化的圖表,從 2015 年第三季度開始,那個時候只有四個 Python 3 服務入口端點。截至 2016 年年中,當切換到默認使用 Python 3 時,F(xiàn)acebook 已經(jīng)有 4% 的服務入口端點使用了 Python 3。2018 年 3 月,這一比例超過 50%。5 月中旬,當他發(fā)表演講時,運行 Python 3 的 Facebook 服務入口端點比例已達 55%。在 Facebook,只能在 Python 2 上運行的代碼現(xiàn)在處于尷尬的境地,F(xiàn)ried 說道。

  Łukasz Langa 發(fā)推文,對 Python 3 低 CPU 占用和運行速度提升表示贊賞。

  演講接近尾聲,他對演講做了概述。總的來說,他的建議包括:

  • 你要做的是創(chuàng)新,做出改變,結果自然會來;

  • 你必須通過“親力親為讓人看到你想要的變化”來引導開發(fā)者;

  • 你還應該尋求他人的幫助,不要單槍匹馬;

  • 另外,培訓新員工去實現(xiàn)你未來的目標是很重要的。

  • 收集需要的數(shù)據(jù);

  • 享受得到的成果,用 Python 3 寫一些“非常棒的東西”。

  ***,他還回答了觀眾提出的一些問題。有人問,如何在傳統(tǒng)、等級分明的組織中實現(xiàn)演講中所說的目標。Fried 認為,實際上這可能會更容易一些,因為你不需要說服成千上萬的開發(fā)者,只需要讓管理層意識到這件事情的好處就可以了。如果在文化保守的組織中,這也可能很難,但專注于代碼質量改進可能對此有所幫助。另一個問題是關于整體代碼,而不是多個入口點,對于這個問題,F(xiàn)ried 建議看看 PyCon 2017 上的 Instagram 主題演講(見文章開頭)。

  整個演講讓人受益匪淺,包括 Fried 強調的倡導者和***,以及堅持不懈的精神在一個項目中的的重要性。

  原文鏈接:

  https://lwn.net/SubscriberLink/758159/f1f631e1535ab9d6/

責任編輯:張燕妮 來源: AI前線
相關推薦

2009-05-21 17:02:13

LinuxNovell中國

2013-09-05 11:23:07

諾基亞微軟

2013-08-07 09:52:20

2012-06-28 09:36:46

iPhone信息圖

2010-09-13 10:40:27

谷歌

2024-04-07 07:30:00

數(shù)據(jù)中心

2015-02-10 17:54:17

ICT產(chǎn)業(yè)鏈格局三年

2020-02-24 19:20:57

Linux內(nèi)核代碼

2020-10-27 18:45:45

GolangGraphQ開發(fā)

2010-01-11 10:14:21

收購創(chuàng)業(yè)公司思科

2022-03-08 14:22:41

元宇宙加密貨幣NFT

2009-07-23 09:55:09

微軟MSNWindowsLive

2020-10-26 10:00:38

互聯(lián)網(wǎng)電商技術

2015-10-14 10:10:46

馬云阿里巴巴

2019-08-28 06:37:58

云服務公有云云計算

2011-02-14 14:14:29

2010-04-28 08:54:01

HTML 5Facebook

2009-03-10 16:11:56

改版Facebook實時通信

2021-06-15 15:17:14

ARM32位CPU

2019-10-11 23:13:19

編程語言軟件程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品在线 | 精品久久久一区二区 | 亚洲欧美在线观看 | 精品一区二区三区日本 | 天堂在线www | 国产精品精品久久久久久 | 国产欧美精品一区二区色综合 | 狠狠综合久久av一区二区小说 | 国产精产国品一二三产区视频 | 欧美精选一区二区 | 97碰碰碰| 在线观看视频中文字幕 | 国产精品久久久久av | 情侣黄网站免费看 | 午夜电影在线播放 | 一级免费毛片 | 成人精品区 | 国产激情精品视频 | 欧美日韩一区二区三区四区五区 | 国产乱码精品一区二区三区五月婷 | 欧美aⅴ | 久久一视频 | 国产精品国产a级 | 成人在线视频网 | 99re | 91精品国产色综合久久不卡98 | 欧美精品一区在线发布 | aa级毛片毛片免费观看久 | 青娱乐自拍| 国产亚洲精品综合一区 | 欧美日韩久久 | 在线观看黄色电影 | 91精品久久久久 | 91久久精品一区二区二区 | 一区二区不卡高清 | 欧美日韩在线一区 | 久久久久久久久久久蜜桃 | 日日摸夜夜爽人人添av | 日韩国产欧美一区 | 欧美四虎 | 三级视频在线观看 |