【Python】python异步编程——协程

好气啊,写(chao)了一大堆,结果脚不小心碰到插座了,全没了!全没了!整整一天的心血(虽然其中很大一部分时间在开小差),本来从python协程的历史,详细介绍了协程一步一步的发展,没动力再重新写一遍了。。。就把协程到底怎么用再写一下。。(python版本3.7++)

 

python协程实现的过程就是:将所有协程注册进一个事件循环,这个事件循环一直在不停的给里面的协程排序,排序的 key 是时间戳。主循环一直扫这个队列, 当前时间戳>=排序 key 就调用这个 key 对应的协程。所有的协程都是在这个队列里排序等待执行。当一个运行中的协程遇到await命令,就会暂停当前任务的执行并保存当前状态,把执行权交给其他任务。等到主循环再把执行权交回当前函数时,从保存的状态继续往下执行。

 

下面来看一下具体怎么使用,来体会一下上面这句话。

import asyncio
import random
import datetime

async def wait_and_echo(content):
    wait = random.randint(0, 10)
    print(f'print {content} after {wait} seconds')
    await asyncio.sleep(wait)                         # 3、保存当前状态,让出执行权
    print(f'{content} printed at {datetime.datetime.utcnow().strftime("%H:%M:%S ")}')

async def main():
    await asyncio.gather(*[wait_and_echo(x) for x in range(3)]) # 2、将协程注册进事件循环

asyncio.run(main())  # 1、启动协程的事件循环



# 运行输出:
print 0 after 2 seconds
print 1 after 3 seconds
print 2 after 5 seconds
0 printed at 07:38:58 
1 printed at 07:38:59 
2 printed at 07:39:01

参考:

1、https://www.v2ex.com/t/517550

2、https://cloud.tencent.com/developer/article/1194415

3、https://www.ruanyifeng.com/blog/2019/11/python-asyncio.html

4、https://www.jianshu.com/p/b5e347b3a17c

5、https://www.liujiangblog.com/course/python/83

6、https://www.liaoxuefeng.com/wiki/1016959663602400/1048430311230688

7、https://blog.csdn.net/soonfly/article/details/78361819

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值