0

簡單的想法,我的網絡爬蟲有兩個主要工作。收藏家和爬行者,收藏家將收集每個網站的所有網址,並存儲非重複的網址。抓取工具將從存儲中抓取URL,提取所需數據並將其存儲。Python網絡爬蟲多線程和多處理

2機

  1. 博特機 - > 8芯,物理Linux操作系統(未VM在此機器上)

  2. 寄存機 - >的MySQL聚類(VM爲聚類), 2個數據庫(網址和數據);端口1和數據端口的URL數據庫2

目的:爬100個網站,並嘗試減少瓶頸情況

第一種情況:收藏家*請求(urllib的)所有網站,收集網址 每個網站的條目和*插入,如果它是非重複的網址到 端口1上的存儲機器。履帶*從存儲端口1獲取網址, *請求站點並提取所需數據並*將其存儲回端口2

這導致兩個要求網站和MySQL連接

第二種情況下,連接瓶頸:不用在機器插入的,收藏家店 我自己的小型數據庫文件的URL system.There沒有*閱讀一個巨大的 文件(使用os命令技術)*寫(追加)和*刪除文件的標頭 。

這導致連接請求的網站和I/O(讀,寫)瓶頸(可以是)

兩種情況下,也具有收集和爬行100位點

的CPU結合的原因正如我聽說的I/O綁定使用多線程,CPU綁定使用多處理

這兩個怎麼樣?精靈?任何想法或建議?

回答

0

看看grequests,它不會做實際的多線程或多處理,但它比兩者都要好得多。

+0

請注意,如果您不想更改用於執行實際爬網的api,也可以使用urlopen和gevent。 – ilyail3

+0

無需多處理或多線程,似乎運行收集器100次並執行抓取程序100次(Handle with布)。問題是Python沒有處理進程,但操作系統。所以CPU的調度確實是有線的。這是操作系統處理的進程之間的輪流 – Runicer