私信小編007即可獲取數十套PDF哦!
看到這麼簡單的流程,內心的第一想法就是先簡單的寫一個遞歸實現唄,要是性能差再慢慢優化,所以第一版代碼很快就完成了(在目錄recursion下)。數據存儲使用mongo,重複請求判斷使用的redis,寫mongo數據採用celery的異步調用,需要rabbitmq服務正常啓動,在settings.py正確配置後,使用下面的步驟啓動:
這是按粉絲數降序排列的用戶列表
運行缺陷
作爲一個有追求的程序員,當然不能因爲一點小成就滿足,總結一下遞歸實現的幾個缺陷:
異步優化
針對這種I/O耗時的問題,解決方法也就那幾種,要麼多併發,要麼走異步訪問,要麼雙管齊下。針對上面的問題2,我最開始的解決方式是異步請求API。因爲最開始寫代碼的時候考慮到了這點,代碼對調用方法已經做過優化,很快就改好了,實現方式使用了grequests。這個庫和requests是同一個作者,代碼也非常的簡單,就是講request請求用gevent做了一個簡單的封裝,可以非阻塞的請求數據。
運行程序
爲了實現多級部署(雖然我就只有一臺機器),消息隊列使用了rabbitmq,需要創建名爲github,類型是direct的exchange,然後創建四個名稱分別爲user, repo, follower, following的隊列,詳細的綁定關係見下圖:
嘿嘿 還是挺好玩的。如果對你有幫助,評論666.謝謝大家閱讀!