python asyncio 协程

异步介绍就不说了.

基础:python协程  python生成器 协程 yield yield from

异步基于事件循环  事件循环基础

在线程中运行与关闭事件循环:动态添加协程 关闭协程

补充材料[ 如不想了解 完全不会影响asyncio的理解和学习, 直接略过即可 ]:

C实现的select模型:I/O复用 select c/s 网络模型

windows下可以使用IOCP , 了解win下编程的可以看看IOCP的实现 : IOCP 完成端口服务器模型

 

正文

协程只运行在事件循环中,

默认情况下asyncio.get_event_loop() 是一个select模型的事件循环,

默认事件循环 asyncio.get_event_loop() 属于主线程,

一个线程一个事件循环, 为什么要一个线程一个事件循环?

[ 这个东西不去了解完全不会影响asyncio包的学习, 如果不懂的话记住一个线程一个事件循环就得了]

简单来说 :事件循环分2个,一个select 模型, 一个win下可用的完成端口模型,而不论select还是IOCP

一般都是死循环 后面调用select 阻塞函数 , iocp的通知消息也是通过线程池中的死循环调用GetQueuedCompletionStatus来完成;

如果要了解一下select / IOCP模型 上面都贴了链接

如果你要使用多个事件循环 , 创建线程后调用

lp = asyncio.new_event_loop() #创建一个新的事件循环
asyncio.set_event_loop(lp)  #设置当前线程的事件循环

 

核心思想: yield from / await . 就这2个关键字, 运行(驱动)一个协程, 同时交出当前函数的控制权,让事件循环执行下个任务.

yield from的实现原理:yield from实现

要搞懂asyncio协程,还是先把生成器弄懂,如果对生成器很模糊,

比如yield from 生成器对象,这个看不懂的话,建议先看python生成器 yield from

有2个方式让协程运行起来,协程(生成器)本身是不运行的

1. await / yield from  协程

2.asyncio.ensure_future/async(协程) 

上面2个方式的区别是  await / yield from 这一组能等待协程完成

 

注意:

1. 协程就是生成器的增强版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值