開發多了,工具用多了,不免會對一些庫的源碼感到好奇,想知道怎麼裏面都用了些什麼技巧、知識。可是不少時候,咱們會感受到無從下手,下面我說下本身的一點點經驗。flask
首先,要看的確定是咱們工做中常常用到的庫,這樣,你至少知道這個庫到底有些什麼功能。若是連有什麼功能你都不清楚,那麼你看源碼確定是沒有目的性的。不帶着問題去看源碼,很容易迷失在其中,這樣即便花時間了,效果也並很差。後端
而後,剛開始閱讀一些庫的源碼的時候,最好選一些代碼量少的先感覺一下。不要認爲代碼量少就不必看,其實不少小項目的代碼風格和技巧,都是值得咱們學習的。在後面的大項目中,咱們可能也會碰到相似的技巧,這個時候咱們相對有經驗一些了。bash
最後,不論是小項目仍是大項目,無論你是查資料仍是經過其它方式,內心最好有一個大體結構。咱們很容易碰到一個點讀不懂,這個時候,咱們不必去死磕,先了解它的功能是啥。當把整個項目的點串起來的時候,你就對項目的設計思想有了進一步的認識。至於以前沒看懂、落下的點,多是某些技巧以前沒接觸過,也有多是某些理論知識缺少,這個時候咱們能夠慢慢去彌補。這樣一來,咱們纔算是有必定提升。多線程
具體該去看些什麼庫呢?我結合自身推薦幾個,但願能觸發你們的靈感。框架
看過我以前文章的都知道,支撐導出工做的時候,我比較喜歡用 kennethreitz/records 庫。有個時候比較空,想看下到底是怎麼實現的,恰好,這個庫代碼也很少,核心邏輯仍是一個單文件,就把它給看完了。看完後,感受仍是 Get 到了一些代碼技巧。與這個庫有關的另外一個庫 kennethreitz/tablib 代碼量也很少,感興趣的也能夠去看下。還有我以前提過的 gleitz/howdoi 庫,也是單文件,去看下也有好處。相似的項目也不是說看的越多越好,找幾個公認的比較好的就行。工具
我主要是寫後端的,因此用 Flask、SQLAlchemy、Celery 等比較多。當碰到的業務需求多了後,會慢慢的發現本身有不少細節不大肯定。好比 Flask 能夠用多線程跑,可是框架又是怎麼保證當前的 request 全局變量就是當前線程的呢?看了源碼後才知道有一個 Local 類,用了點小技巧(線程 ID)讓咱們看起來線程之間的數據是隔離着的。具體 Flask 怎麼支持的 WSGI,咱們能夠去看 Werkzeug 庫;怎麼實現模版渲染的,能夠去看下 Jinja 庫。帶着問題的時候去看代碼,效果好不少。慢慢的,咱們便清楚了 Flask 的大體結構,這個時候咱們就能夠去找一些以前可能沒有理解的點進行深挖。若是你是作後端的,我推薦你能夠先看下 Flask、Werkzeug、Requests 庫,而後再結合自身狀況看下 SQLAlchemy、Celery 等其它庫。學習
知道了看哪些庫,又怎麼開始呢?拿 Flask 示範一下。測試
首先,將庫克隆到本地,進入項目根目錄,執行命令spa
pip install --editable .
複製代碼
將 Flask 安裝在當前目錄,方便咱們修改測試。線程
最後,跑一個 Demo。進入 examples/flaskr 目錄,按照 README 操做
(1)Edit the configuration
(2)pip install --editable .
(3)export FLASK_APP=flaskr
(4)flask initdb
(5)flask run
最後,打開連接 http://localhost:5000
能夠看到程序已經正常啓動。若是碰到問題,百度/谷歌通常都能解決。
到這,就去看源碼中你感興趣的地方吧。若是有必要,能夠修改框架或 flaskr 中的代碼後,從新安裝運行,驗證本身的想法。
本文首發於公衆號「小小後端」。