目标
解释async关键字原理, 同时举例说明协程中断, 并交出控制权
例子说明
跟yield from的实现一样, 每一行程序都是按顺序一步一步执行的,如果有程序不是按顺序执行,表示曾经交出了控制权,以下的例子,本来应该应该顺序输出1,2,但是因为req1交出了控制权,所以,输出了2,1
import time
from collections import deque
from asynciox.taskx import sleep
_delay = deque()
def sleep1():
def sleep01():
yield
return None
co = sleep01.__code__
sleep01.__code__ = co.replace(co_flags=co.co_flags | 0x100)
return sleep01()
def coroutine(func):
co = func.__code__
func.__code__ = co.replace(co_flags=co.co_flags | 0x100)
return func
@coroutine
def sleep0():
'''
装饰器@:可以理解为 sleep0=coroutine(sleep0),意思就是sleep0函数执行之前,
先调用coroutine方法执行一段内容之后,再把sleep0返回来
'''
yield
return None
async def req1():
b = await sleep0()
return 1
async def req2():
return 2
f1 = req1()
try:
result = f1.send(None)
except StopIteration as e:
print(f'正常打印 {e.value}')
pass
else:
_delay.append((f1, 1+time.time()))
f = req2()
try:
f.send(None)
except StopIteration as e:
print(f'正常打印 {e.value}')
pass
for i, v in _delay:
start = v
while True:
end = time.time()
if start < end:
try:
result = i.send(None)
except StopIteration as e:
print(f'延迟打印 {e.value}')
pass
break
pass
'''
结果:
正常打印 2
延迟打印 1
'''
审核编辑:刘清
-
中断
+关注
关注
5文章
913浏览量
43566 -
python
+关注
关注
57文章
4858浏览量
89598
发布评论请先 登录
Temu跨境电商按关键字搜索Temu商品API的应用及接口请求示例
哪些场合会用到volatile关键字?
天眼查平台关键字搜索企业数据API接口技术指南
咸鱼平台商品关键字搜索API接口设计与实现
item_search-按关键字搜索商品列表API接口
1688平台关键字搜索商品API接口技术实践指南
亚马逊平台根据关键字搜索商品API接口
关于协处理器自定义指令的实现
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
阿里巴巴开放平台关键字搜索商品接口实战详解:OAuth2.0 认证落地 + 检索效率优化(附避坑代码)
阿里巴巴国际站关键字搜索 API 实战:从多条件筛选到商品列表高效获客

python协程之解释async关键字原理
评论