multiprocessing 使用 Process+Queue 的多進程爬蟲示例

《Python網絡爬蟲:從入門到實踐》書中7.3.1節講到,使用multiprocessing庫的第一種方法,是Process+Queue 的多進程爬蟲,還給出一個例子,發現有重大邏輯bug,經1天時間研究,將正確的代碼公佈出來,方便廣大愛好者使用、參考。

以下代碼同時統計了各個子進程爬取的頁面數量,已經在Pycharm 5.0.3上測試通過,歡迎大家評論留言,有問題我看到後會及時回覆,謝謝。

from multiprocessing import Process, Queue, cpu_count
import time
import requests

class MyProcess(Process):
    def __init__(self, q,amount=0):
        Process.__init__(self)
        self.q = q
        self.amount = amount

    def run(self):
        times = 0
        print ("Starting " , self.pid)
        while not self.q.empty():
            times += 1
            crawler(self.q)
        self.amount = times
        print ("pid爲",self.pid,"的子進程嘗試連接的頁面數量是:",self.amount)
        print ("Exiting " , self.pid)

def crawler(q):
    url = q.get(timeout=2)
    try:
        r = requests.get(url, timeout=20)
        print (q.qsize(), r.status_code, url)
    except Exception as e:
        print (q.qsize(), url, 'Error: ', e)

# 保證當前的.p
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章