一、首先想到的是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方面的话两者基本一样,我们知道线程是存在于进程里面的,所以得出多线程是效率最高的。 那么问题来了,例如我开了线程池,里面同时可执行10个线程,那么这10个线程同时执行的话,得等待返回response,那就在那傻傻的等,我们还想让他干点别的事怎么办?这里我们就要涉及到了异步io,其实我个人理解就是比线程更加小的线程(微线程),主要特点是非租塞,回调(成没成都会告诉你),主流的技术asyncio、gevent、Twisted、
Tornado(Tornado不只是web框架哦)

python爬虫之爬虫性能篇的更多相关文章

  1. Python自动化测试面试题-性能篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  2. Python自动化测试面试题-接口篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  3. Python自动化测试面试题-经验篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  4. Python自动化测试面试题-Linux篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  5. Python自动化测试面试题-MySQL篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  6. Python自动化测试面试题-Redis篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  7. Python自动化测试面试题-编程篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  8. Python自动化测试面试题-Selenium篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  9. Python爬虫入门这一篇就够了

    何谓爬虫 所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本.万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息. 爬虫三要素 抓取 分析 存储 基础 ...

  10. Python实战:爬虫的基础

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

随机推荐

  1. 16.ajax_case02

    # 抓取当当网书评 # http://product.dangdang.com/25340451.html import json import requests from lxml import e ...

  2. 文件IO模型

    In case of kernel-space network drivers, all three regions are mapped to kernel space, and any acces ...

  3. Jmeter插件安装及使用

    1 安装Plugins Manager插件 1.1 下载Plugins Manager插件 插件下载官方地址:https://jmeter-plugins.org/downloads/all/ 将下载 ...

  4. 转://云和恩墨的两道Oracle面试题

    真题1. 对于一个NUMBER(1)的列,如果查询中的WHERE条件分别是大于3和大于等于4,那么这二者是否等价? 答案:首先对于查询结果而言,二者没有任何区别.从这一点上讲无论是指定大于3还是指定大 ...

  5. Linux 系统安装

      内容概要  VMware虚拟机软件应用  Linux系统安装设置  远程登录管理工具介绍   VMware 简介 VMware是一个虚拟PC的软件,可以在现有的操 作系统上虚拟出一个新的硬件 ...

  6. 吴恩达课后作业学习1-week3-homework-one-hidden-layer

    参考:https://blog.csdn.net/u013733326/article/details/79702148 希望大家直接到上面的网址去查看代码,下面是本人的笔记 建立一个带有隐藏层的神经 ...

  7. pytorch例子学习——TRAINING A CLASSIFIER

    参考:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar1 ...

  8. 论文笔记(一)---翻译 Rich feature hierarchies for accurate object detection and semantic segmentation

    论文网址: https://arxiv.org/abs/1311.2524 RCNN利用深度学习进行目标检测. 摘要 可以将ImageNet上的进全图像分类而训练好的大型卷积神经网络用到PASCAL的 ...

  9. jquery()后续版本中,live()取消后使用on()实现功能写法

    今天做项目想用live()功能,写完打开浏览器发现报错 然后查了查发现自己用的是jquery是jquery-2.1.1.min.js,而jquery早就取消了live()方法,在后续版本里都已经没有使 ...

  10. 修改spring源码重写classloader实现项目加密

      (一)操作方法和spring源码添加修改部分 事先说明:spring源码要下载好,会有修改spring的源码操作,本文和本作者所依赖的spring项目的版本是3.1.1,spring4及以上源码对 ...