python 协程

目录

什么是协程?

 如何实现协程?

 协程的意义


​​​​​​​​​​​​​​

开门见山: 协程:最通俗解释: 同一个线程间 函数 执行来回切换. (上下文切换技术)

就是说, 通过一个线程实现代码块相互切换执行.

 如何实现协程?

  • greenlet,是一个第三方模块,用于实现协程代码(Gevent协程就是基于greenlet实现)
  • yield,生成器,借助生成器的特点也可以实现协程代码。
  • asyncio,在Python3.4中引入的模块用于编写协程代码。
  • async & awiat,在Python3.5中引入的两个关键字,结合asyncio模块可以更方便的编写协程代码。

Python3.8之后 @asyncio.coroutine 装饰器就会被移除,推荐使用async & awit 关键字实现协程代码。

import asyncio


async def fun1():
    print(1)
    await asyncio.sleep(2)
    print(2)


async def fun2():
    print(3)
    await asyncio.sleep(2)
    print(4)


tasks = [
    asyncio.ensure_future(fun1()),
    asyncio.ensure_future(fun2()),

]

loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(tasks))

运行结果: 

 协程的意义

  1. 计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状态 反倒会降低性能。
  2. IO型的操作,利用协程在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能,从而实现异步编程(不等待任务结束就可以去执行其他代码)。

换句话说, 每个线程如果遇到IO等待时间,线程不会傻傻等待IO结束,而是利用CPU空闲的时候做其他事 也就是异步.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值