Python 爬虫性能相关总结
这里我们通过请求网页例子来一步步理解爬虫性能
当我们有一个列表存放了一些url需要我们获取相关数据,我们首先想到的是循环
简单的循环串行
这一种方法相对来说是最慢的,因为一个一个循环,耗时是最长的,是所有的时间总和
代码如下:这里我们通过请求网页例子来一步步理解爬虫性能
当我们有一个列表存放了一些url需要我们获取相关数据,我们首先想到的是循环
简单的循环串行
这一种方法相对来说是最慢的,因为一个一个循环,耗时是最长的,是所有的时间总和
代码如下:
import requestsurl_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 ThreadPoolExecutordef 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)
线程池+回调函数
这里定义了一个回调函数callback线程池+回调函数
这里定义了一个回调函数callback

from concurrent.futures import ThreadPoolExecutor
import requestsdef fetch_async(url):response = requests.get(url)return responsedef 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 ProcessPoolExecutordef 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 requestsdef fetch_async(url):response = requests.get(url)return responsedef 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()
主流的单线程实现并发的几种方式
asyncio
gevent
Twisted
Tornado
下面分别是这四种代码的实现例子:
asyncio例子1:
import asyncio@asyncio.coroutine #通过这个装饰器装饰
def func1():print('before...func1......')# 这里必须用yield from,并且这里必须是asyncio.sleep不能是time.sleepyield from asyncio.sleep(2)print('end...func1......')tasks = [func1(), func1()]loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
相关文章:
Python 爬虫性能相关总结
这里我们通过请求网页例子来一步步理解爬虫性能 当我们有一个列表存放了一些url需要我们获取相关数据,我们首先想到的是循环 简单的循环串行 这一种方法相对来说是最慢的,因为一个一个循环,耗时是最长的,是所有的时间总和 代码…...
Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)
Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)Baumer工业相机Baumer工业相机设置网络端口IP地址匹配设置网络端口IP地址和工业相机IP地址匹配第一次打开CameraExplorer软件确认问题为IP地址不匹配问题打开网络连接…...
Android MediaCodec设置H264 Profile到High
H264 High Profile压缩率高,能降低码率,这里记录下MediaCodec Profile设置到High遇到的一些问题。 Android 4.1 就引入了MediaCodecInfo.CodecProfileLevel类,下面截取H264(AVC)的Profile和Level定义: /** Copyright (C) 2012 The Android O…...
QT之QSysInfo(查看电脑信息)
文章目录前言一、API使用总结前言 QSysInfo是Qt中用于获取有关运行应用程序的系统信息的类。 我们可以获取以下信息: 返回系统产品类型,如ios,windows,Linux等 返回当前系统的产品版本。 返回当前系统的内核类型。 返回当前系统的…...
中国塑料编织袋产业竞争状况及投资前景预测报告2023-2029年
中国塑料编织袋产业竞争状况及投资前景预测报告2023-2029年 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK 《报告编号》: BG451639 《出版时间》: 2023年4月 《出版机构》: 中智正业研究院 免费售后 服务一年,具体内容及订购流程欢迎咨询客服人员 内容简介&…...
从头用脚分析FFmpeg源码 - av_read_frame
av_read_frame作用 /*** Return the next frame of a stream.* This function returns what is stored in the file, and does not validate* that what is there are valid frames for the decoder. It will split what is* stored in the file into frames and return one f…...
第17章_触发器
第17章_触发器 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…...
3956. 截断数组
3956. 截断数组 - AcWing题库 3956. 截断数组 【题目描述】 给定一个长度为 nn 的数组 a1,a2,…,ana1,a2,…,an。 现在,要将该数组从中间截断,得到三个非空子数组。 要求,三个子数组内各元素之和都相等。 请问,共有多少种不同…...
React Labs: 我们最近在做什么——2023 年 3 月
原文:https://react.dev/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023 React Server Components React Server Components(下文简称 RSC) 是由 React 团队设计的新应用程序架构。 我们首先在一个介绍性演讲和一个RFC中分享了我们对 RSC 的…...
文件系统设计详解
抽象的文件系统以目录的形式来组织文件,我们可以利用该文件系统来读取某个文件的内容,也可以对目录或者文件实施监控并及时获取变化的通知。 IChangeToken IChangeToken对象就是一个与某组监控数据相关联的“令牌”(Token)&#x…...
好看~立马启动python实现美女通通下
人生苦短,我用python一、环境版本使用二、代码实现思路三、代码展示:导入模块伪装(请求头)四、部分好看截图,更多的就自己去采集噜~吃饭放松的时候哇一不小心看见了很多好看的东西 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 独乐乐不如众乐乐…...
Git 安装设置
1、安装 安装以下三个软件: Git-2.13.3-64-bit.exe TortoiseGit-2.4.0.2-64bit.msi TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi 安装过程中不用填写、不用选择,全部点"下一步",完成后需要重启机器。 2、基本设…...
Python-闭包
介绍 Python的闭包是一种高级的编程技巧,它可以在函数内部定义另一个函数,并返回该函数的引用。这个内部函数可以访问外部函数的变量和参数,即使外部函数已经执行完毕 好处 1)闭包可以避免全局变量的污染,使得代码更…...
Gitlab中Pipeline语法四
Gitlab中Pipeline语法 cache cache:paths 在job build中定义缓存,将会缓存target目录下的所有*.jar文件当全局定义了cache:paths会被job中覆盖.以下实例将缓存target目录 buld:script: buildcache:paths:- target/*.jar#设置key可以解决cache被覆盖 cache:paths:- my/files…...
Go语言精修(尚硅谷笔记)第五章
五、程序流程控制 5.1 单分支控制 package main import ("fmt" )func main() {//请大家看个案例[ifDemo.go]://编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大//于18,要对自己的行为负责!"//分析 //1.年龄 > var age int…...
三、MySQL 高级(DML 增删改)
三、MySQL 高级(DML 增删改) 3.1 DML 数据操纵语言 DML(Data Manipulation Language)DML对数据库中表记录的执行操作 插入(INSERT) 插入单行数据 插入多行数据 将查询结果插入到新表 更新(…...
面向AI编程的本质是什么?
面向AI编程的本质是什么? 面向AI编程的本质是编程的第五代编程语言,与自然语言非常相似,但是是有区别的。 因此出现了针对与AI通话的提示工程。 简单地回顾一下编程语言的发展史, 第一代编程语言是机器语言,它直接使…...
深入浅出——深度学习训练中的warmup
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
你知道如何用C语言将格式化数据和字符串相互转换吗?
今天重点介绍2个函数,分别是sprintf和sscanf,用来将格式化数据和字符串相互转换。它们的作用分别是: sprintf函数用于将格式化数据转换成字符串。sscanf函数用于将字符串转换成格式化数据。 接下来是第一个大问题:我怎么记忆呢&…...
免费一键生成原创文章-原创文章批量生成
免费使用一键生成原创文章,轻松解决写作难题! 您是否因为写作枯竭、文章档次不高,而感到烦恼?现在,我们有一个免费的文章创作工具,帮助您无需付出太多的努力就能高效地创造原创文章。 一键生成࿱…...
5分钟成为效率大师!NoteGen快捷键可视化配置终极指南
5分钟成为效率大师!NoteGen快捷键可视化配置终极指南 【免费下载链接】note-gen 一款专注于记录和写作的跨端 AI 笔记应用。 项目地址: https://gitcode.com/GitHub_Trending/no/note-gen NoteGen是一款专注于记录和写作的跨端AI笔记应用,通过快捷…...
软文SEO的常见指标有哪些_如何撰写有吸引力的软文标题
<h2>软文SEO的常见指标有哪些</h2> <p>在当今的数字营销领域,软文(Soft Article)已经成为推动网站流量和品牌知名度的重要工具。要让软文真正发挥作用,我们必须了解软文SEO的常见指标,这些指标可以帮…...
Mojo嵌入Python项目的4种架构模式(含GIL绕过实测数据+内存安全验证报告)
第一章:Mojo嵌入Python项目的4种架构模式(含GIL绕过实测数据内存安全验证报告)Mojo 作为兼具 Python 兼容性与系统级性能的新兴语言,其嵌入 Python 项目的能力已通过多种生产就绪架构得到验证。以下四种主流集成模式均在 macOS Ve…...
PDF-Extract-Kit-1.0保姆级部署教程:4090D单卡一键启动Jupyter实战
PDF-Extract-Kit-1.0保姆级部署教程:4090D单卡一键启动Jupyter实战 你是不是经常需要从PDF里提取表格、公式或者分析文档布局?手动操作不仅费时费力,还容易出错。今天,我要给你介绍一个神器——PDF-Extract-Kit-1.0。这是一个功能…...
解决EF Core中的GroupBy与Include的冲突问题
在使用Entity Framework Core(EF Core)进行数据库操作时,我们常常会遇到一些复杂的查询需求,尤其是在涉及到数据的分组与关联加载时。今天我们来探讨一下如何在EF Core中处理GroupBy与Include方法的冲突。 问题描述 假设我们有一个产品数据库,包含产品(Products)、供应…...
别再死记硬背DAQmx流程了!LabVIEW数据采集核心逻辑拆解:以USB-6008正弦波实验为例
从设计模式视角重构LabVIEW数据采集:以USB-6008正弦波实验为例 当LabVIEW新手第一次接触DAQmx数据采集时,往往会被"创建任务→添加通道→配置时钟→开始任务→读取数据→清除任务"的固定流程所困扰。这种机械记忆不仅容易遗忘,更难…...
nlp_gte_sentence-embedding_chinese-large保姆级教程:免配置镜像启动+Web界面使用详解
nlp_gte_sentence-embedding_chinese-large保姆级教程:免配置镜像启动Web界面使用详解 你是不是经常遇到这样的问题:手里有一堆文档,想快速找到和某个问题最相关的内容,却只能靠关键词搜索,结果要么漏掉,要…...
【手把手教学】Tesseract-OCR图片文字识别从安装到实战
1. Tesseract-OCR简介与安装准备 第一次接触图片文字识别技术时,我和很多人一样觉得这是个遥不可及的黑科技。直到发现了Tesseract-OCR这个开源工具,才发现原来OCR技术可以如此亲民。Tesseract最初由HP实验室开发,后来由Google接手维护&#…...
SunnyUI的UITreeView控件实战:从拖拽到动态加载的完整指南
SunnyUI的UITreeView控件实战:从拖拽到动态加载的完整指南 在企业级应用开发中,树形结构数据展示几乎是每个.NET开发者都会遇到的场景。传统的WinForms TreeView控件虽然基础功能完善,但在现代UI体验和开发效率上逐渐显得力不从心。SunnyUI框…...
MacOS上Rust安装全攻略:从权限问题到成功验证(附常见错误解决)
MacOS上Rust安装全攻略:从权限问题到成功验证 最近两年Rust在开发者社区的热度持续攀升,Stack Overflow的年度调查显示它已经连续七年成为"最受喜爱编程语言"。但对于刚接触Rust的Mac用户来说,安装过程可能会遇到一些棘手的权限问题…...
