目標
協程中斷, 并交出控制權
想說的話
本系列主要側重理解, 而不是編程初期的知識學習, 當我想要理解協程中斷的時候, 搜索了很多文章, 都指向需要使用asyncio.get_event_loop(), 但這是一個封裝了很多邏輯的代碼, 為了直觀理解, 編寫了如下例子
例子說明
每一行程序都是按順序一步一步執行的,如果有程序不是按順序執行,表示曾經交出了控制權,以下的例子,本來應該應該順序輸出1,2,但是因為req1交出了控制權,所以,輸出了2,1
import time
from collections import deque
_delay = deque()
def sleep0():
yield
return None
def req1():
yield
b = yield from sleep0()
return 1
def req2():
yield
return 2
f1 = req1()
f1.send(None)
try:
result = f1.send(None)
except StopIteration as e:
print(f'正常打印 {e.value}')
pass
else:
_delay.append((f1, 1+time.time()))
f = req2()
f.send(None)
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文章
917瀏覽量
43758 -
python
+關注
關注
57文章
4876瀏覽量
90032
發布評論請先 登錄
解析Linux的進程、線程和協程
NICE協處理器接口信號解讀--以demo為例
利用Verdi調試協處理器的實現步驟
MD5信息摘要算法實現二(基于蜂鳥E203協處理器)
蜂鳥E203協處理器EAI指令及接口
NICE協處理器demo分析及測試
基于E203 NICE協處理器擴展指令
基于E203 NICE協處理器擴展指令2.0
簡析Modbus和MQTT協議
簡析Modbus與MQTT的區別
請問NICE協處理器與傳統ocb外設相比的優勢有什么?
NICE協處理器與傳統ocb外設相比的優勢有什么?
10分鐘上手寫代碼,LuatOS協程輕松掌握!
進程、線程、協程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
零基礎入門:如何在樹莓派上編寫和運行Python程序?
python協程之yield break簡析
評論