python爬虫之爬虫性能篇
一、首先想到的是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爬虫之爬虫性能篇的更多相关文章
- Python自动化测试面试题-性能篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-接口篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-经验篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-Linux篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-MySQL篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-Redis篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-编程篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python自动化测试面试题-Selenium篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- Python爬虫入门这一篇就够了
何谓爬虫 所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本.万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息. 爬虫三要素 抓取 分析 存储 基础 ...
- Python实战:爬虫的基础
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...
随机推荐
- IOS解析XML文件
这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个參考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-ho ...
- 分布式锁(一) Zookeeper分布式锁
什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理.分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而 ...
- 发现电脑上装着liteide,就用golang做一个TCP通讯测试(支持先启动client端和断线重连)
1.参考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt&qu ...
- UVA1152-4 Values whose Sum is 0(分块)
Problem UVA1152-4 Values whose Sum is 0 Accept: 794 Submit: 10087Time Limit: 9000 mSec Problem Desc ...
- UVA12107-Digit Puzzle(迭代加深搜索)
Problem UVA12107-Digit Puzzle Accept:85 Submit:612 Time Limit: 3000 mSec Problem Description Inpu ...
- 【适合N卡独显电脑的环境配置】Tensorflow教程-Windows 10下安装tensorflow 1.5.0 GPU with Anaconda
注意: 1.目前Anaconda 更新原命令activate tensorflow 改为 conda activate tensorflow 2. 目前windows with anaconda 可以 ...
- [JXOI2018]守卫
嘟嘟嘟 正如某题解所说,这题很有误导性:我就一直在想凸包. 随便一个数据,就能把凸包hack掉: 这样我们的点G就gg了. 所以正解是什么呢?dp. 题解看这位老哥的吧,我感觉挺好懂的:题解 P456 ...
- 小a的轰炸游戏 (差分)
我是看题解的! 这道题还是有很多细节,当然,是一道差分的好题! 题意:有2种飞机,一种是只炸上半菱形,一种是炸整个菱形.问所有区域内的所有格子的异或和. 思路:用前缀和思路: 这样遍历过去就完成了一次 ...
- javascript中数组化的一般见解
javascript中数组化的一般见解,数组化浏览器中存在许多类数组对象,往往对类数组操作比较麻烦,没有数组那些非常方便的方法,在这种情况下,就有了数组化方法. 数组化的一般方法 1.第一种也是我们最 ...
- yaml的简单学习
参考http://www.ruanyifeng.com/blog/2016/07/yaml.html 基本语法规则如下. • 大小写敏感 • 使用缩进表示层级关系 • ...