async和await的理解

在这里插入图片描述

1.1 可见async是异步的意思,

异步是什么意思呢,就是说我们可以同时执行很多函数任务,但是和多线程不一样

1.2 我们先来了解一下进程和线程

假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于10个线程,1个进程是可以开多线程的。这就是多线程!
我们可以用多线程 用10个工人,但是这样有点浪费资源啊,一个人就能干,为啥非得用10个,就为了快一点点.太浪费了

1.3 异步函数

一个人,把衣服放进去,然后打开开关,然后去搞下一台就行了,洗衣机就是我们的异步函数,

1.4 多线程和异步函数的区别
  • 我们在同一时间只能打开一台洗衣机的盖子和开关,但是我们可以打开后就不用管了,等其执行完毕
  • 多线程是可以同时打开盖子和开关并执行,多线程更快,但是有时候浪费资源
1.5 asyncio内置库

要实现异步,要借助这个库的使用,下面是这个库的使用方法说明

import asyncio

asyncio.sleep() # 异步休眠 , 可以当成一个异步函数,当成我们的洗衣服这件事

asyncio.wait()  # 接收一个可迭代对象(一般是列表) 列表元素是异步函数(洗衣机)
# 这个方法的作用可以理解为将洗衣机放到洗衣房里,可以让一个员工操作 

# 创建loop对象,这个对象可以循环调用异步函数,说白了就是可以打开多个洗衣机盖子放衣服
loop = asyncio.get_event_loop() 

# 循环调用异步函数,打开多个洗衣机盖子放衣服,main()是我们的主异步执行函数
loop.run_until_complete(main())
1.6 实现异步
要实现异步用法必须至少有三个异步函数
  • 第一个是一个协程(coroutine)函数,比如洗衣服这件事 这里用asyncio.sleep(10)来代替,10秒洗一桶衣服,
  • 第二个是task函数,我们想要用异步,就要将第一个函数包含在task函数中,然后用asyncio.wait()处理task函数,才能被异步执行,这个异步函数相当于洗衣机
  • 第三个是我们的的主执行异步函数
import time
import asyncio

# 定义task函数,即我们的洗衣机,洗衣机的编号是n
async def task(n):
    print(f'打开{n}号洗衣机')
    time.sleep(1)
    print(f'向{n}号放衣服,关上盖子')
    time.sleep(1)
    await asyncio.sleep(10)
    print(f'{n}号洗完了,请捞衣服')

# 定义 主执行函数,并使用asyncio,wait() 将5台洗衣机放入洗衣房
async def main():
    await asyncio.wait([
        task(1),
        task(2),
        task(3),
        task(4),
        task(5),
        ])
 
loop = asyncio.get_event_loop()
# 工人开始工作,执行主异步函数
loop.run_until_complete(main())
loop.close()

执行完上面的代码,你大概就了解到什么是异步了
异步就是,我们不能在同一时间调用函数,但是可以依次调用,然后让它去执行.
而多线程则是可以同时调用和执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值