码迷,mamicode.com
首页 > 编程语言 > 详细

python爬虫之爬虫性能篇

时间:2017-12-04 23:35:18      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:proc   mit   roc   for   gif   线程池   图片   com   future   

 

一、首先想到的是for循环,单线程爬取每个url,但是如果有url出现了问题,后面的url就得等,性能低。

二、我们考虑线程池的问题,下面我们定义了线程池里面最多10个任务,也就是说最多同一时间只能有10个爬行任务,这样的话就是自己干自己的互相不影响,加上主线程的话是n+1个线程,缺点也很明显,耗时最长时间取决于最长的那个任务使用的时间。pool.shutdown(True)主线程等待子线程执行完城后,再退出。

技术分享图片
import requests
from concurrent.futures import ThreadPoolExecutor

def 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 requests
from concurrent.futures import ProcessPoolExecutor

def 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爬虫之爬虫性能篇

标签:proc   mit   roc   for   gif   线程池   图片   com   future   

原文地址:http://www.cnblogs.com/lei0213/p/7979375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!