目標(biāo)
解釋async關(guān)鍵字原理, 同時(shí)舉例說(shuō)明協(xié)程中斷, 并交出控制權(quán)
例子說(shuō)明
跟yield from的實(shí)現(xiàn)一樣, 每一行程序都是按順序一步一步執(zhí)行的,如果有程序不是按順序執(zhí)行,表示曾經(jīng)交出了控制權(quán),以下的例子,本來(lái)應(yīng)該應(yīng)該順序輸出1,2,但是因?yàn)閞eq1交出了控制權(quán),所以,輸出了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函數(shù)執(zhí)行之前,
先調(diào)用coroutine方法執(zhí)行一段內(nèi)容之后,再把sleep0返回來(lái)
'''
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
'''
結(jié)果:
正常打印 2
延遲打印 1
'''
審核編輯:劉清
-
中斷
+關(guān)注
關(guān)注
5文章
913瀏覽量
43598 -
python
+關(guān)注
關(guān)注
57文章
4861瀏覽量
89671
發(fā)布評(píng)論請(qǐng)先 登錄
Temu跨境電商按關(guān)鍵字搜索Temu商品API的應(yīng)用及接口請(qǐng)求示例
哪些場(chǎng)合會(huì)用到volatile關(guān)鍵字?
天眼查平臺(tái)關(guān)鍵字搜索企業(yè)數(shù)據(jù)API接口技術(shù)指南
咸魚(yú)平臺(tái)商品關(guān)鍵字搜索API接口設(shè)計(jì)與實(shí)現(xiàn)
item_search-按關(guān)鍵字搜索商品列表API接口
1688平臺(tái)關(guān)鍵字搜索商品API接口技術(shù)實(shí)踐指南
亞馬遜平臺(tái)根據(jù)關(guān)鍵字搜索商品API接口
關(guān)于協(xié)處理器自定義指令的實(shí)現(xiàn)
亞馬遜 SP-API 深度開(kāi)發(fā):關(guān)鍵字搜索接口的購(gòu)物意圖挖掘與合規(guī)競(jìng)品分析
阿里巴巴開(kāi)放平臺(tái)關(guān)鍵字搜索商品接口實(shí)戰(zhàn)詳解:OAuth2.0 認(rèn)證落地 + 檢索效率優(yōu)化(附避坑代碼)
阿里巴巴國(guó)際站關(guān)鍵字搜索 API 實(shí)戰(zhàn):從多條件篩選到商品列表高效獲客

python協(xié)程之解釋async關(guān)鍵字原理
評(píng)論