目標
解釋async關(guān)鍵字原理, 同時舉例說明協(xié)程中斷, 并交出控制權(quán)
例子說明
跟yield from的實現(xiàn)一樣, 每一行程序都是按順序一步一步執(zhí)行的,如果有程序不是按順序執(zhí)行,表示曾經(jīng)交出了控制權(quán),以下的例子,本來應該應該順序輸出1,2,但是因為req1交出了控制權(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返回來
'''
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文章
900瀏覽量
41807 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85086
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Kconfig介紹
飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Kconfig介紹
C語言關(guān)鍵字分別發(fā)生在哪個階段
使用邊緣AI和Sitara處理器進行關(guān)鍵字檢測
![使用邊緣AI和Sitara處理器進行<b class='flag-5'>關(guān)鍵字</b>檢測](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
typedef struct和直接struct的區(qū)別
pytorch和python的關(guān)系是什么
Python建模算法與應用
用pycharm進行python爬蟲的步驟
快速掌握C語言關(guān)鍵字
![快速掌握C語言<b class='flag-5'>關(guān)鍵字</b>](https://file.elecfans.com/web2/M00/9B/3D/poYBAGQjnauAVXOgAABFcEbXdEE684.png)
inline關(guān)鍵字被優(yōu)化導致此類函數(shù)被布局在flash內(nèi),怎么處理?
鴻蒙OS開發(fā)實例:【ArkTS類庫異步并發(fā)async/await】
![鴻蒙OS開發(fā)實例:【ArkTS類庫異步并發(fā)<b class='flag-5'>async</b>/await】](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
評論