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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章