簡單的想法,我的網絡爬蟲有兩個主要工作。收藏家和爬行者,收藏家將收集每個網站的所有網址,並存儲非重複的網址。抓取工具將從存儲中抓取URL,提取所需數據並將其存儲。Python網絡爬蟲多線程和多處理
2機
博特機 - > 8芯,物理Linux操作系統(未VM在此機器上)
寄存機 - >的MySQL聚類(VM爲聚類), 2個數據庫(網址和數據);端口1和數據端口的URL數據庫2
目的:爬100個網站,並嘗試減少瓶頸情況
第一種情況:收藏家*請求(urllib的)所有網站,收集網址 每個網站的條目和*插入,如果它是非重複的網址到 端口1上的存儲機器。履帶*從存儲端口1獲取網址, *請求站點並提取所需數據並*將其存儲回端口2
這導致兩個要求網站和MySQL連接
第二種情況下,連接瓶頸:不用在機器插入的,收藏家店 我自己的小型數據庫文件的URL system.There沒有*閱讀一個巨大的 文件(使用os命令技術)*寫(追加)和*刪除文件的標頭 。
這導致連接請求的網站和I/O(讀,寫)瓶頸(可以是)
兩種情況下,也具有收集和爬行100位點
的CPU結合的原因正如我聽說的I/O綁定使用多線程,CPU綁定使用多處理
這兩個怎麼樣?精靈?任何想法或建議?
請注意,如果您不想更改用於執行實際爬網的api,也可以使用urlopen和gevent。 – ilyail3
無需多處理或多線程,似乎運行收集器100次並執行抓取程序100次(Handle with布)。問題是Python沒有處理進程,但操作系統。所以CPU的調度確實是有線的。這是操作系統處理的進程之間的輪流 – Runicer