python爬蟲之爬蟲效能篇

來源:互聯網
上載者:User

標籤:proc   mit   roc   for   gif   線程池   圖片   com   future   

 

一、首先想到的是for迴圈,單線程爬取每個url,但是如果有url出現了問題,後面的url就得等,效能低。

二、我們考慮線程池的問題,下面我們定義了線程池裡面最多10個任務,也就是說最多同一時間只能有10個爬行任務,這樣的話就是自己幹自己的互相不影響,加上主線程的話是n+1個線程,缺點也很明顯,耗時最長時間取決於最長的那個任務使用的時間。pool.shutdown(True)主線程等待子線程執行完城後,再退出。

import requestsfrom concurrent.futures import ThreadPoolExecutordef fetch_request(url):    requests.get(url)pool = ThreadPoolExecutor(10)url_list = [    ‘https://www.baidu.com‘,    ‘https//:www.douban.com‘]for url in url_list:    pool.submit(fetch_request,url)pool.shutdown(True)
簡單線程池

 三、多進程,進程池的基本寫法。

import requestsfrom concurrent.futures import ProcessPoolExecutordef fetch_request(url):    requests.get(url)pool = ProcessPoolExecutor(10)url_list = [    ‘https://www.baidu.com‘,    ‘https//:www.douban.com‘]for url in url_list:    pool.submit(fetch_request,url)pool.shutdown(True)
簡單多進程

 


總結:
  1、首先利用for迴圈肯定是最次的串列寫法,其次我們討論多進程和多線程的效率。
  2、多進程首先要開通很多的記憶體空間,耗空間。IO方面的話兩者基本一樣,我們知道線程是存在於進程裡面的,所以得出多線程是效率最高的。




 

python爬蟲之爬蟲效能篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.