Python3爬虫(十二) 爬虫性能
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爬虫(十二) 爬虫性能的更多相关文章
- 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)
1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...
- Python爬虫(十二)_XPath与lxml类库
Python学习指南 有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素. 什 ...
- Spark(十二)--性能调优篇
一段程序只能完成功能是没有用的,只能能够稳定.高效率地运行才是生成环境所需要的. 本篇记录了Spark各个角度的调优技巧,以备不时之需. 一.配置参数的方式和观察性能的方式 额...从最基本的开始讲, ...
- Python爬虫学习二------爬虫基本原理
爬虫是什么?爬虫其实就是获取网页的内容经过解析来获得有用数据并将数据存储到数据库中的程序. 基本步骤: 1.获取网页的内容,通过构造请求给服务器端,让服务器端认为是真正的浏览器在请求,于是返回响应.p ...
- python3 第二十二章 - 函数式编程之Decorator(装饰器)
前面我们说了,在python中,一切皆对象.函数也是一个对象,而且函数对象可以被赋值给变量,通过变量也能调用该函数.如: def sayHello(name): print(name + ' hell ...
- springboot(十二) SpringBoot 性能优化
代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo springboot优化主要有三类优化:1.包扫描优化 2. ...
- python3笔记十二:python数据类型-Dictionary字典
一:学习内容 字典概念 字典创建 字典访问 字典添加 字典删除 字典遍历 字典与列表比较 二:字典概念 1.使用键值对(key-value)存储,具有极快的查找速度 2.注意:字典是无序的 3.特性: ...
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接. 产能在软 ...
- 循序渐进Python3(十二) --0-- web之框架
web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf ...
- 循序渐进Python3(十二) --1-- web框架之django
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
随机推荐
- Selenium2学习(十三)-- JS处理滚动条
前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候 ...
- Python 列表(list)操作
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- 插上翅膀,让Excel飞起来——xlwings(二)
在上一篇插上翅膀,让Excel飞起来——xlwings(一)中提到利用xlwings模块,用python操作Excel有如下的优点: xlwings能够非常方便的读写Excel文件中的数据,并且能够进 ...
- POJ 1503 大整数
之前做的大整数,都是一位一位操作. 优化方案:压缩方案. 模板: + - * 操作符重载 #include<cstdio> #include<iostream> #inclu ...
- iOS 适配安装包
每次自己需求都是去一顿搜索,所以就在此记录一下,免得以后再麻烦. 链接: https://pan.baidu.com/s/1zXEFlt94bz3O1e3GdtG92w 密码: rc4k 摘抄自:ht ...
- 【转】netstat 命令当中的内部地址和外部地址分别代表的是什么?
RT,用自己的话解释,不要搬网上的内容.尽量可以简洁,谢谢 2015-03-07 17:41 提问者采纳 网络连接是有2方参与,自己就是“内部地址”,别人就是“外部地址”,就这么简洁. 再举个例子 ...
- Sublime Text 3的安装,卸载,更新,激活
安装: 下载安装包:建议到官方网站下载,网址:http://www.sublimetext.com/3 . 卸载 在Finder中进入“/Users/用户名/Library/Application S ...
- Joker
人生的第一位老师当然是我的爸妈,他们生我下来,教我学会走路讲话,教会我做人的道理,当然,他们还给我名字.人生的第二位老师就是我的初中老师,初中班主任对我非常好,在之后的考上市一中也是其中的缘由,初中班 ...
- Android学习笔记_26_多媒体之拍照
一.配置文件: 需要引入摄像头权限,sdcard读写权限. <?xml version="1.0" encoding="utf-8"?> <m ...
- Access用OleDbParameter更新/插入数据
/// <summary> /// 更新一条数据 /// </summary> public void Update(ZPY.Model.News model) { Strin ...