前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫----异步---高性能爬虫----aiohttp 和asycio 的使用

爬虫----异步---高性能爬虫----aiohttp 和asycio 的使用

原创
作者头像
百里丶落云
发布2023-11-14 14:38:40
3140
发布2023-11-14 14:38:40
举报
文章被收录于专栏:享~方法

在爬虫中异步是一个必须会的技能。 这里记录一下学习爬虫中遇到的问题。还有如何使用这两个异步模块。

一:性能比对

    多进程,多线程,(这里不建议使用,太消耗性能)

    进程池和线程池 (可以适当的使用)

    单线程+异步协程   (推荐使用)

二:案例演示

    1->1: 普通的啥也不用的

    1->2:

      2->1:

      使用线程池

      2->2:结果

三:异步协程

    1: 协程的参数设定

event_loop:

事件循环,相当于一个无限循环,我们可以把一些区数注册到这个事件循环上,当满足某些条件的时候,函数就会被循环执行。程序是按照设定的顺序从头执行到尾,运行的次数也是完全按照设定。当在编写异步程序时,必然其中有部分程序的运行耗时是比较久的,需要先让出当前程序的控权,让其在背后运行,让另一部分的程序先运行起来。当背后运行的程序完成后,也需要及时通知主程序已经完成任务可以进行下一步操作,但这个过程所票的时间是不确定的,需要主程序不断的临听状态,一日收到了任务完成的消息,就开始进行下一步。100p就是这个持续不断的监视器。

coroutine:

中文翻译叫协程,在 Pytho 中常指代为协程对象类型,我们可以将协程对象注册到事件循环中,它会被事件循环调用。我们可以使用async 关键字来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。

task:

任务,它是对协程对象的进一步封装,包含了任务的各个状态。

future:

代表将来执行或还没有执行的任务,实际上和 task 没有本质区别。

另外我们还需要了解 asymc/aait 关键字,它是从 Python 3.5 才出现的,专门用于定义协程。其中,asym 定义一个协程,await 用来挂起阻塞方法的执行。

2:协程的简单使用

结果:

3:task的使用

4:future 的使用

5:

回调函数的使用

四:支持异步请求网络的模块: aiohttp

代码语言:javascript
复制
import aiohttp
import asyncio

async def get_page(url):             
    async with aiohttp.ClientSession() as session:      #with 前面都要加async
        async with await session.get(url=url) as response:  # 有io阻塞的都要加await 挂起
            page_text = await response.text() #read()  json()
            print(page_text)
start = time.time()
urls = [
    'http://127.0.0.1:5000/bobo',
    'http://127.0.0.1:5000/jay',
    'http://127.0.0.1:5000/tom',
    'http://127.0.0.1:5000/bobo',
    'http://127.0.0.1:5000/jay',
    'http://127.0.0.1:5000/tom',
    'http://127.0.0.1:5000/bobo',
    'http://127.0.0.1:5000/jay',
    'http://127.0.0.1:5000/tom'
]
tasks = []
loop = asyncio.get_event_loop()
for url in urls:
    c = get_page(url)
    task = asyncio.ensure_future(c)
    tasks.append(task)
loop.run_until_complete(asyncio.wait(tasks))
print('总耗时:',time.time()-start)

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档