標籤: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爬蟲之爬蟲效能篇