知乎後台為什麼用python?

載入內容奇慢,豆瓣也是。


這問題咋還有人問??不說有帖子說過了嗎!

因為拷貝的Quora,Quora用的Python!!


說句實話,知乎的技術實力跟大公司沒法比,以往甚至出現過很多低級錯誤,這不是技術選型的問題,單純就是code review沒做好。

1. 網頁端黑名單頁面在服務端渲染後一次性發送給用戶,沒有分頁!後來某些用戶黑名單人數太多,查看黑名單時就會崩潰。反饋後的修復辦法是:只顯示五十個被屏蔽用戶……真的是連個分頁都懶得加。

2. 超過一段時間沒有點開APP端設置,就需要從伺服器拉取設置信息,在拉取數據期間APP呈現無響應狀態,配合知乎的土豆伺服器……那個體驗太酸爽了。

目前似乎有了改善,沒有仔細測試。

總結: 不是Python語言的問題,而是知乎技術水平的問題。

不過看新版頁面對應的API設計,看起來知乎有錢之後請了厲害的程序員。

最近一段時間確實體驗上有了很多改善。

從昨天(2017.8.2)開始,我的消息推送有嚴重延遲,推測知乎正在升級服務,等這波升級完再看看效果如何。


引用 @趙雲濤 話:

決定網站性能的主要因素是架構,然後是代碼水平,最後才是語言

另外, 知乎用戶:知乎響應這麼慢是因為使用了 Python 語言嗎? ?_?


在2010年10月真正開始動手做知乎這個產品時,包含李申申在內,最初只有兩位工程師;到2010年12月份上線時,工程師是四個。

知乎的主力開發語言是Python。因為Python簡單且強大,能夠快速上手,開發效率高,而且社區活躍,團隊成員也比較喜歡。

知乎使用的是Tornado框架。因為它支持非同步,很適合做實時Comet應用,而且簡單輕量,學習成本低,再就是有FriendFeed 的成熟案例,Facebook 的社區支持。知乎的產品有個特性,就是希望跟瀏覽器端建立一個長連接,便於實時推送Feed和通知,所以Tornado比較合適。

最初整個團隊的精力全部放在產品功能的開發上,而其他方面,基本上能節約時間、能省的都用最簡單的方法來解決,當然這在後期也帶來了一些問題。

更多看 知乎CTO李申申:從0到100--知乎架構變遷史


知乎是內容網站,一次給你不算太多的數據,渲染都是前台呀,網頁版是後台不過他們做了靜態化,頭條,知乎遇到的問題根本不是業務伺服器的壓力呀,也不是語言的問題啊,是Io啊,10s處理業務1e9s處理io.的時候,用c.降低了業務處理的9/10然而有卵用?業務是個無窮小量啊無窮小啊,話說回來,內容網站需要什麼?內容數據,用戶數據,然後做數據分析啊,python天生一堆包,這些包底層都是native方法啊,都是c/c++啊,其實不慢的,出現問題只是開發的鍋或者產品的鍋,不是語言的鍋


銀行系統用java寫的,速度很慢,怪java咯?


頭條也是用Python開發的,n倍於知乎的體量,你覺得它卡嗎


你確定載入慢是Python帶來的問題嗎?


要知道為什麼選擇Python,就要了解它的一些優勢:

⑴作為初學python的科班出身的小白,python非常簡單,非常適合人類閱讀。閱讀一個良好的Python程序就感覺像是在讀英語一樣,儘管這個英語的要求非常嚴格!Python的這種偽代碼本質是它最大的優點之一。它使你能夠專註於解決問題而不是去搞明白語言本身。

  ⑵易學。python雖然是用c語言寫的,但是它擯棄了c中非常複雜的指針,簡化了python的語法。

  ⑶Python是FLOSS(自由/開放源碼軟體)之一。簡單地說,你可以自由地發布這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。Python希望看到一個更加優秀的人創造並經常改進。

  ⑷可移植性————由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程序無需修改就可以在下述任何平台上面運行。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基於linux開發的Android平台。

   ⑸在計算機內部,Python解釋器把源代碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。事實上,由於你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,所有這一切使得使用Python更加簡單。由於你只需要把你的Python程序拷貝到另外一台計算機上,它就可以工作了,這也使得你的Python程序更加易於移植。

   ⑹Python既支持面向過程的函數編程也支持面向對象的抽象編程。在面向過程的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在面向對象的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。

   ⑺ 可擴展性和可嵌入性。如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

  ⑻豐富的庫。Python標準庫確實很龐大。python有可定義的第三方庫可以使用。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線程、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的「功能齊全」理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。

  ⑼ Python確實是一種十分精彩又強大的語言。它合理地結合了高性能與使得編寫程序簡單有趣的特色。

  ⑽規範的代碼。Python採用強制縮進的方式使得代碼具有極佳的可讀性。


注意審題吧。問的是為什麼用python,那些回答某某網站速度很快的跑題了吧,你是那個網站的首席架構師么?


這和載入慢沒關係的好吧?


很多項目都可以用不同的語言實現,知乎一開始的時候也就是名不見經傳的小項目,至於為什麼用pytest,可能當時主持項目的人相對於java更喜歡和擅長python吧

就像我們現在的自動化是python+unittest,如果這個項目繼續做下去了,後面來的人可能會問,unittest不是大多用來單元測試么?pytest和testng不才是王道么?

原因么,因為我太懶,不想在內網環境一步一步用安裝包裝環境,現成的unittest幹嘛不用?


[/摸摸頭.jpg]youtube大部分其實也是python寫的,我感覺它慢的原因是網不好[/自己都怕.jpg]。


載入慢的鍋python不背


這又是來黑python慢的?

作為python使用者表示不服


可能是搶開發周期吧,也或許架構師有信心以後可以替換。


推薦閱讀:

可以多個server進程同時監聽一個unix socket文件么?
Django和Flask這兩個框架在設計上各方面有什麼優缺點?
Vim 中如何對 Python 進行代碼補全?
GitHub 上有哪些值得關注的 Django 項目?
Django 學習順序及入門要求?

TAG:Python | Java | Django框架 | Flask | JavaWeb |