Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、简单的循环串行
一个一个循环,耗时是最长的,是所有的时间综合

import requests
url_list = [
'http://www.baidu.com',
'http://www.pythonsite.com',
'http://www.cnblogs.com/'
] for url in url_list:
result = requests.get(url)
print(result.text)

二、通过线程池
整体耗时是所有连接里耗时最久的那个,相对于循环来说快了不少

import requests
from concurrent.futures import ThreadPoolExecutor def fetch_request(url):
result = requests.get(url)
print(result.text) url_list = [
'http://www.baidu.com',
'http://www.bing.com',
'http://www.cnblogs.com/'
]
pool = ThreadPoolExecutor(10) for url in url_list:
#去线程池中获取一个线程,线程去执行fetch_request方法
pool.submit(fetch_request,url) pool.shutdown(True)

三、线程池+回调函数
定义了一个回调函数

from concurrent.futures import ThreadPoolExecutor
import requests def fetch_async(url):
response = requests.get(url) return response def callback(future):
print(future.result().text) url_list = [
'http://www.baidu.com',
'http://www.bing.com',
'http://www.cnblogs.com/'
] pool = ThreadPoolExecutor(5) for url in url_list:
v = pool.submit(fetch_async,url)
#这里调用回调函数
v.add_done_callback(callback) pool.shutdown()

四、通过进程池
进程池的方式访问,同样的也是取决于耗时最长的,但是相对于线程来说,进程需要耗费更多的资源,同时这里是访问url时IO操作,所以这里线程池比进程池更好

import requests
from concurrent.futures import ProcessPoolExecutor def fetch_request(url):
result = requests.get(url)
print(result.text) url_list = [
'http://www.baidu.com',
'http://www.bing.com',
'http://www.cnblogs.com/'
]
pool = ProcessPoolExecutor(10) for url in url_list:
#去进程池中获取一个线程,子进程程去执行fetch_request方法
pool.submit(fetch_request,url) pool.shutdown(True)

五、进程池+回调函数
这种方式和线程+回调函数的效果是一样的,相对来说开进程比开线程浪费资源

from concurrent.futures import ProcessPoolExecutor
import requests def fetch_async(url):
response = requests.get(url) return response def callback(future):
print(future.result().text) url_list = [
'http://www.baidu.com',
'http://www.bing.com',
'http://www.cnblogs.com/'
] pool = ProcessPoolExecutor(5) for url in url_list:
v = pool.submit(fetch_async, url)
# 这里调用回调函数
v.add_done_callback(callback) pool.shutdown()

Python3爬虫(十二) 爬虫性能的更多相关文章

  1. 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)

    1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...

  2. Python爬虫(十二)_XPath与lxml类库

    Python学习指南 有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素. 什 ...

  3. Spark(十二)--性能调优篇

    一段程序只能完成功能是没有用的,只能能够稳定.高效率地运行才是生成环境所需要的. 本篇记录了Spark各个角度的调优技巧,以备不时之需. 一.配置参数的方式和观察性能的方式 额...从最基本的开始讲, ...

  4. Python爬虫学习二------爬虫基本原理

    爬虫是什么?爬虫其实就是获取网页的内容经过解析来获得有用数据并将数据存储到数据库中的程序. 基本步骤: 1.获取网页的内容,通过构造请求给服务器端,让服务器端认为是真正的浏览器在请求,于是返回响应.p ...

  5. python3 第二十二章 - 函数式编程之Decorator(装饰器)

    前面我们说了,在python中,一切皆对象.函数也是一个对象,而且函数对象可以被赋值给变量,通过变量也能调用该函数.如: def sayHello(name): print(name + ' hell ...

  6. springboot(十二) SpringBoot 性能优化

    代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo springboot优化主要有三类优化:1.包扫描优化 2. ...

  7. python3笔记十二:python数据类型-Dictionary字典

    一:学习内容 字典概念 字典创建 字典访问 字典添加 字典删除 字典遍历 字典与列表比较 二:字典概念 1.使用键值对(key-value)存储,具有极快的查找速度 2.注意:字典是无序的 3.特性: ...

  8. 循序渐进Python3(十二) --2--  web框架之django简单实现oracle数据库操作

    在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接.             产能在软 ...

  9. 循序渐进Python3(十二) --0--  web之框架

    web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf ...

  10. 循序渐进Python3(十二) --1--  web框架之django

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

随机推荐

  1. Nginx+Tomcat+Session 高性能群集搭建

    随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器.apache有优点也 有不足,apache渐渐不能满足人们的要求,目前ngi ...

  2. NO.011-2018.02.16《三五七言 / 秋风词》唐代:李白

    三五七言 / 秋风词_古诗文网 三五七言 / 秋风词 唐代:李白 秋风清,秋月明,秋风凌清,秋月明朗. 落叶聚还散,寒鸦栖复惊.风中的落叶时聚时散,寒鸦本已栖息,又被明月惊起.落叶聚还(huán)散: ...

  3. 『看球笔记』20131230切尔西vs利物浦,赛后复盘聊聊球

    2013-12-30 第十九轮英超联赛 切尔西vs利物浦         看着这张板凳合照… 有木有一种心里哇凉哇凉的感觉.   赛后whoscored的平均位置图 左边车子,右边我军     阿格回 ...

  4. ubuntu桌面

    gnome-desktop-item-edit ~/Desktop/  --create-new

  5. CentOS如何部署TinyProxy

    TinyProxy是个非常便利,及容易架设的HTTP代理 安装方法 rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release- ...

  6. POJ 2155 Matrix【二维树状数组+YY(区间计数)】

    题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  7. 2018.11.15 Nginx服务器的使用

    Nginx简单教程 1.什么是Nginx? Nginx(engine x)是一款轻量级的Web服务器.反向代理服务器及电子邮件(IMAP/POP3)代理服务器 什么是反向代理服务器? 反向代理方式是指 ...

  8. Struts2 第五讲 -- Struts2与Servlet的API解耦

    为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSession 和 ServletContext ...

  9. HIbernate jar包

    密码nbbk https://pan.baidu.com/share/init?surl=nYNO1f20FWMQiZ7iN11DIA

  10. iOS之苹果调整 App Store 截图上传规则,截图尺寸、大小等

    作者:ASO100链接:https://zhuanlan.zhihu.com/p/23041522来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 自从 8 月中旬苹果向 ...