標籤:

如何看待 Instagram 將所有 Web 後端遷移到 Python 3.6 ?

Instagram在PyCon 2017上的分享:https://www.youtube.com/watch?v=66XoCk79kjM 。

Django 後端和 Celery 非同步任務全部已經遷移到 Python 3 。


視頻的精華部分:

遷移到Python3之後,

if uwsgi.opt.get("optimize_mem") == "True":
optimize_mem()

發現內存不僅沒降,反而漲了。。。。看了半天原因,

發現這句改成

if uwsgi.opt.get("optimize_mem") == b"True":
optimize_mem()

內存就降了。。。


簡答一下吧

  1. 用戶不關心你用的是Py2還是Py3,你只要掛了,就有人罵街,不信你看知乎。
  2. 產品只想月底前上線,至於用啥,鬼才關心。
  3. 技術趨勢不可忽略,不然,幾年後你招不到人,因為大部分庫都已經開始不支持Py2了。
  4. 會用Py2,用Py3做項目沒問題,令人頭大的是基礎設施。整套流程都得改。不是不好改,是需要時間,這個時間產品/領導是不會給的,得自己爭取(擠)。

@董偉明 期待豆瓣的遷移分享,O(∩_∩)O~

補充兩點吧:

5. 作為基於Django的最大規模的應用,遷移需要成本,當然也會得到對應的收益,slide中動機部分已經說明了。對我們而言,這有一定的標杆作用,可以理直氣壯的說,看Instagram都遷移Py3了,人家那麼大,我們這麼小,更容易啊。

6. 演講中也說到了踩過的幾個坑,對於後面想要遷移的人來說,少了些試錯的成本。又是個利好。


我特別看不慣有一幫人無腦的天天嚷嚷要遷移Python 3,好像誰不遷就如何如何似得,不知道Python 2和你有什麼仇?

代碼量太少,比如萬行級別的代碼2小時就遷完了的東西就別出來說話了,直接去遷了。但想想為什麼谷歌不出來說已經遷移到Python 3或者正在進行中?

算了,先來豆瓣試試吧:讓你天天改代碼,連改半年你也遷不完,而且這個過程你還不能用Python 3,有人說哎呀新項目用Python 3啊,對不起,所有基礎設施都是Python 2的。

所以,事情有那麼簡單?另外要看看Ins遷移的理由,分享中說他們是遇到一些瓶頸且由於Django版本太低(1.3)所以打了很多補丁,希望更多的挑戰和嘗試多種方案(Async, new Python runtime)。好好運行的一個項目你告訴我遷移的理由是什麼?不過Ins還是打了遷移Python 3的第一槍,贊一個。

這個分享說了這麼一句話:

at instagram, out bottleneck is development velocity not pure code execution

此處pycon會場響起了掌聲。我再補一刀:

Python 2用不好的,換成Python 4也是垃圾。Python 2熟悉的,分分鐘寫Python 3的代碼

我從2016年初開始就寫Python 2/3兼容的代碼,在非生產環境也寫過多個Python 3的項目,我特別期待有一天出現一個「如何看待豆瓣將所有 Web 後端遷移到 Python 3 ?」的問題的出現。


  1. 如果Python2的代碼遷到Python3難度很大,說明Python2的代碼本身質量就很差,本來就是應該刪掉重寫的
  2. 其實不用2了,再讀一遍1吧

方案也很簡單:先把舊代碼逐步改寫成2/3兼容,然後一次性切換到3。有單元測試例的,直接在Python3上跑同樣的測試,就知道遷移是否成功了。有第三庫不兼容Python3的,直接換掉那個庫。


作為隔壁寫JS的,表示貴Python社區可能缺一個babel


既然用了django,遷移到py3有啥奇怪的。django從明年推出2.0開始不支持py2。而最後支持py2的1.11lts也就支持到2020年初。


Python 2 到 3 是一種趨勢啊。


Python3出來這麼久,主流的Python庫都已經兼容Python3了,並且很多框架庫正在逐漸的停止對Python2的支持,所以綜合未來考慮的,不如趁早轉到Python3,不要等到真的停止對Python2支持的時候才想著去轉到Python3.

個人和企業是不同的,個人用Python2隨時可以轉到Python3,等你願意的時候再轉,等到你喜歡的一些框架、庫停止對Python2更新的時候,你再轉到Python3也不遲,對個人來說也沒有什麼損失,但是對企業來說就是一次災難了。

另外,Python3也沒有比Python2差呀,甚至在很多方面是好於Python2的,那麼那些一直用Python3作為主流開發語言的的企業,不轉Python3我反而感到驚訝了。

以下是Google Trends中Python2與Python3趨勢的對比,Python3已經遠遠超過了Python2。

其實Python2轉Python3一直以來只是時間問題。


這個我之前在內部分享的時候就介紹過了對應的遷移問題,當時反正我寫的項目是Python2/3兼容的。。

遷移會凸顯很多問題:原有的項目的代碼水平、單元測試覆蓋水平。bytes其實也引入了新的問題,只要慢慢改也倒能改完

如果項目之前做過服務化的拆分,和平演變會更容易些,不然的話,有的受的。。

現在一個神奇的問題就是:需求發送的量和開發能提供的工作量 的問題了

大公司不用愁,前者通常小於後者
如果後者小於前者,遷移、重構這些事情,就是遙遙無期。。。


從趨勢上來看,Python 2 → 3 的進化是整個Python社區的大勢所趨,隨著Python 2支持限期的趨近,向Python 3的遷移是很正常的事情。連Windows 10都強制推升級呢。

基礎設施基於Python 2,日積月累積壓了一大堆「技術債」——這不是不升級、不應變的籍口。也許業務還能扛得住,也許Python 2還用得很好,但也總要為後期長遠些的日子考慮吧?早作準備早做思考是需要的。

對於為什麼遷移到Python 3,我想技術棧上有一定延續性是重要考量點之一。其實技術棧的演變太普遍了,如果每個演變都需要「如何看待?」,都需要「津津樂道」一番,那確實有點大驚小怪了,因為像「我們為什麼從Python切換到PHP」,以及「為何從PHP轉到了Go」這類現如今再普遍不過的話題,跨度、角度都大得多、刺激得多......


說明現在程序員的時間變得越來越值錢了。。。


搞py交易,新的總比舊的好


Garena uses Python 2.7.x (x64). If you"re cool and want to use Python 3, please send a 1500 word essay to xxx@seagroup.com explaining why it is infinitely better to use Python 3.

hhh 早就想放這個了,來自我司 Python 技術規範。Are you cool ?


從舊技術轉移到新技術是趨勢啊。

Python 2和Python 3是割裂的,語法有差異,各類第三方庫也不通用

雖然論豐富程度,Python 2第三方庫,為開發者提供了幾乎數不盡的調用資源,這點Python 3完全比不了,甚至還有一些庫,壓根兒沒法移植過去,除非重構。

Python 3把bytes和str的行為分開,是一件好事,終於修正了一個歷史錯誤了,有人說不好,我不同意!

Python 3每次升級都會帶來新的stdlib,會修正過往的錯誤,還可能會加入新的語法和特性。比如Python 3.4.x裡面新的asyncio庫,也是老幼咸宜的。


我開始寫PHP的時候...用的是版本5...

那時候主流是4...或者說大量存在4的...

那時候覺得用4的都是智障, 4 語法特性那麼弱...

現在PHP到7了... 我還在用5 也不知道是不是個智障...

反正項目代碼量在那, 不想升...

從一個框架遷移到另一個框架下面, 我都不想做...


Python3才是未來


因為Instagram的後台架構用到了Django,而Django最近好像有動作。

追夢人物:如何看待從Django 2.0開始不再提供對Python2的支持?


個人感覺,這個需要下定決心,從剛開始決定研發語言方向的時候就得確定,如果用Python,就直接上3。長痛不如短痛


有什麼好看待的 早就該遷移了 又不是國內(


同事身份證到期換證,

自己的還有幾天到期,

還看什麼?


推薦閱讀:

Python混合類型計算中的一點疑惑?
Python 3.6 有什麼新特性?
Python2轉Python3有沒有必要重新學習?
VPS 如何搭建 Python 環境?
為什麼 Python 不用 C++ 實現?

TAG:Python | Python3x |