迭代器
可迭代:直接作用于for循环的变量 迭代器:可作用于for循环,还可以被next调用 isinstance判断 iterable和iterator可以转换
生成器
generator 包含yield 遇到yield返回,并且记住当前位置,下一次执行从上一次返回的位置 next()调用
L = [ x* x for x in range ( 5 ) ]
g = ( x* x for x in range ( 5 ) )
print ( type ( L) )
print ( type ( g) )
<class 'list'>
<class 'generator'>
协程
是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不同位置暂停或开始执行程序,可以理解成一个生成器。 协程实现:
协程的四个状态
inspect.getgeneratorstate(…):函数确定,返回以下字段中的一个 GEN_GREATE:等待开始执行 GEN_RUNNING:解释器正在执行 GEN_SUSPENED:在yield表达式处暂停 GEN_CLOSED:执行结束 NXET预激(prime) 协程终止
协程终止未处理的异常会向上冒泡至触发者 终止协程的一种方式:发送哨兵值(None、Ellipse等) yield from
调用协程为了得到返回值,协程必须正常终止 生成器正常终止会发出StopInteration异常,异常对象的value值属性保存到返回值 yield from从内部捕获StopInteration异常 委派生成器
包含yield from 生成器函数 在yield from表达式的地方暂停,调用者可以直接把数据发给子生成器 子生成器再把产出的值发送给调用者 子生成器最后,解释器会抛出StopInteration异常,并且把返回值附加到异常对象上
asyncio消息循环
async/await
aiohttp
asyncio实现单线程的并发io,客户端用处不大 在服务端可以实现asyncio+coruntine,由于http是异步操作 asyncio实现了tcp,udp,ssl等协议 aiohttp是用asyncio实现的http框架
concurrent