Python爬虫 asyncio异步编程 协程事件循环、async、await、Task、Ruture

asyncio异步编程

  1. event_loop 事件循环:相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足条件时,就会调用对应的处理方法。
  2. coroutine 协程:协程对象,只一个使用async关键字定义的函数,他的调用不会立即执行函数,而是会返回一个协程对象。协程对象需要注册到事件循环中,由事件循环调用。
  3. task 任务:一个协程对象就是一个原生可以挂起的函数,任务则是对协程的进一步封装,其中包含任务的各种状态。
  4. future:代表将来执行或没有执行的任务结果。它与task没有本质的区别。
  5. async/await 关键字:python3.5用于定义协程的关键字,async定义一个协程,await用于挂起阻塞的异步调用接口。

事件循环

event_loop 事件循环:相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足条件时,就会调用对应的处理方法。
理解成为一个死循环,去检测并执行某些代码。
在这里插入图片描述

import asyncio
# 生成或获取一个事件循环
loop = asyncio.get_event_loop()
# 将任务放到任务列表
loop.run_until_complete(任务)

async协程函数、协程对象

async def 函数名: 这种格式的函数,我们就称之为协程函数。

async def fun()pass

执行协程函数() 得到的就是协程对象

result = fun() # 协程对象

注意:协程函数内部代码不会执行,只是得到一个协程对象

执行协程函数,需要与事件循环结合

如果需要执行协程函数内部代码,必须将协程对象交给事件循环处理。

import asyncio
async def fun()print(1)
result = fun()

# loop = asyncio.get_event_loop()
# loop.run_until_complete(fun())
# loop.run_until_complete(result)
asyncio.run(result) #py3.7

asyncio.run(result) = loop = asyncio.get_event_loop() loop.run_until_complete(fun())

await

await 就是等待对象的值得到结果之后,才继续往下执行;等待期间可以执行其他任务
await + 可等待对象(协程对象、Future、Task对象),简单理解就是 IO等待

import asyncio


async def func():
    print('start')
    response = await asyncio.sleep(2)
    print('end', response)


async def func1():
    print('func1')

asyncio.run(func())

一个协程函数里可以有多个await

import asyncio


async def func():
    print('start')
    await asyncio.sleep(2)
    print('end')
    return 'gg'


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值