DropBox使用Python的6個(gè)經(jīng)驗(yàn)分享
下面是 DropBox 使用 Python 的經(jīng)驗(yàn)分享:
1.1 Use Python
Dropbox 的 99.9% 的代碼是用 Python 寫的。 Python 使用在服務(wù)器端、桌面的客戶端、網(wǎng)站控制邏輯,后端的 API 和分析
在 Android 平臺(tái),由于內(nèi)存的限制不能使用 Python
使用 Python 語言運(yùn)行單一的代碼。通過使用 PyObjs , WxPython , types , py2exe , py2ap , PyWin32 等工具,讓 Dropbox 運(yùn)行在 Windows , Mac 和 Linux 系統(tǒng)
優(yōu)點(diǎn):
開發(fā)人員通過 Python 互相溝通和表達(dá)思想
簡單易學(xué),易于閱讀,易于編寫,新人容易上手
缺點(diǎn):
別傻了
它消耗太多的內(nèi)存并且運(yùn)行的太慢。在服務(wù)器端不是大問題,只要買大的機(jī)器就行。但在客戶端,你別指望讓老的 Power PC 用戶升級(jí)設(shè)備
Python 和 C 混合編程會(huì)產(chǎn)生問題,因?yàn)樗茈y跨越語言邊界輪廓想象你使用固定內(nèi)存和 CPU 想干什么( Coding in a mixed environment of Python and C creates problems because it's hard to profile across the language boundaries like you want to do when fixing memory and CPU problems. )
內(nèi)存碎片問題是腳本語言可能不是一個(gè)長期運(yùn)行進(jìn)程的好主意
1.2 從開始就讓它工作 (Just Work Baby)
如果不管你是什么文件系統(tǒng),是什么操作系統(tǒng),什么應(yīng)用程序所使用。該產(chǎn)品應(yīng)始終只是要能工作。
在所支持的種類繁多的平臺(tái)上,分析遇到的各種錯(cuò)誤, Python 幫助他們進(jìn)行快速的迭代。
1.3 早發(fā)布 (Release Early)
在一天內(nèi)進(jìn)行編碼并發(fā)布它,使用 Python 很容易做到
1.4 在循環(huán)內(nèi)使用 C ,優(yōu)化 CPU 是容易的 (Use C for Inner Loops, Optimizing CPU is easy)
是一種解決速度太慢的問題的方法。
優(yōu)化內(nèi)部循環(huán),以減少 CPU 時(shí)間。
在 Python 中循環(huán)與 C 中相比,多消耗 44% 時(shí)間
Python 的虛擬機(jī)字節(jié)碼調(diào)度是很慢。
有許多工具調(diào)優(yōu) CPU 。
CPU 優(yōu)化通常限于小代碼段
1.5 輪詢不容易擴(kuò)展 (Polling 30 million clients all over the world doesn’t scale)
建立一個(gè) HTTP 通知結(jié)構(gòu),以避免客戶端輪詢服務(wù)器。
1.6 自定義內(nèi)存分配器,優(yōu)化內(nèi)存很困難
曾經(jīng)有一段時(shí)間***的問題??梢允褂玫拇罅績?nèi)存但內(nèi)存永遠(yuǎn)不會(huì)被釋放。對(duì)于大型同步他們可以使用最多 1.5GB 的,現(xiàn)在他們很少使用超過 100MB 的。
很難,因?yàn)椋?/p>
很少有工具為 Python 和 C 優(yōu)化內(nèi)存
內(nèi)存膨脹有很多的原因:在 Python 和 C 代碼內(nèi)存泄漏,內(nèi)存碎片,內(nèi)存使用效率不高。
固定內(nèi)存的低效率沒有明顯的幫助。他們認(rèn)為有一個(gè)內(nèi)存泄漏,但沒有。
問題變成了內(nèi)存碎片。內(nèi)存碎片是發(fā)生在不同大小的內(nèi)存塊是不斷被刪除和分配。什么情況是連續(xù)的內(nèi)存塊可以不再進(jìn)行分配。 CPython 沒有一個(gè)垃圾收集器,所以所有的內(nèi)存根本無法分配和堆內(nèi)存不斷增長
解決辦法是建立一個(gè)自定義分配器。該文件的元數(shù)據(jù)對(duì)象時(shí),做了很多的增長轉(zhuǎn)移,所以明顯的成果是在 C 中使用 mmap 創(chuàng)建自定義分配器。
原文鏈接:http://www.linuxidc.com/Linux/2011-04/34748.htm
【編輯推薦】