目標
協程中斷, 并交出控制權
想說的話
本系列主要側重理解, 而不是編程初期的知識學習, 當我想要理解協程中斷的時候, 搜索了很多文章, 都指向需要使用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文章
899瀏覽量
41540 -
python
+關注
關注
56文章
4797瀏覽量
84789
發布評論請先 登錄
相關推薦
評論