目標(biāo)
解釋async關(guān)鍵字原理, 同時(shí)舉例說明協(xié)程中斷, 并交出控制權(quán)
例子說明
跟yield from的實(shí)現(xiàn)一樣, 每一行程序都是按順序一步一步執(zhí)行的,如果有程序不是按順序執(zhí)行,表示曾經(jīng)交出了控制權(quán),以下的例子,本來應(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返回來
'''
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
'''
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
以下C語言關(guān)鍵字,分別發(fā)生在哪個(gè)階段? 第一個(gè),define。 首先得糾正一下,define 并不是C語言里面的關(guān)鍵字,即使加了井號(hào),也不是。 define 屬于C語言的預(yù)處理指令,很顯然,它發(fā)生
發(fā)表于 11-24 10:31
?194次閱讀
C語言關(guān)鍵字使用方法學(xué)習(xí)指南!
發(fā)表于 10-07 12:44
?285次閱讀
電子發(fā)燒友網(wǎng)站提供《使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè).pdf》資料免費(fèi)下載
發(fā)表于 09-02 11:30
?0次下載
使用方式和靈活性上存在一些區(qū)別。下面詳細(xì)解釋這兩種方式的區(qū)別和用法。 直接使用 struct 當(dāng)你直接使用 struct 關(guān)鍵字定義一個(gè)結(jié)構(gòu)體時(shí),你創(chuàng)建了一個(gè)新的類型,但你需要通過 struct
發(fā)表于 08-20 10:58
?2871次閱讀
,PyTorch已經(jīng)成為了一個(gè)非常受歡迎的框架。本文將介紹PyTorch和Python之間的關(guān)系,以及它們?cè)谏疃葘W(xué)習(xí)領(lǐng)域的應(yīng)用。 Python簡(jiǎn)介 Python是一種高級(jí)、解釋型、通用
發(fā)表于 08-01 15:27
?2049次閱讀
C語言中的32個(gè)關(guān)鍵字你知道多少個(gè)呢?根據(jù)關(guān)鍵字的作用分為四類:數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲(chǔ)類型關(guān)鍵字和其它
發(fā)表于 07-06 08:04
?363次閱讀
問題解決。
但是,希望樂鑫官方把idf內(nèi)源碼中的inline關(guān)鍵詞都替換為__attribute((always_inline)),因?yàn)閕nline關(guān)鍵字不可靠!
期待下次idf版本更新能解決此bug,自己修改idf源碼真的是權(quán)宜之計(jì)、臨時(shí)之策。
發(fā)表于 06-21 12:03
async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡(jiǎn)單和易讀。通過使用async關(guān)鍵字聲明一個(gè)函數(shù)為異步函數(shù),并使用await關(guān)鍵字等待Pro
發(fā)表于 04-02 20:57
?1060次閱讀
async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡(jiǎn)單和易讀。通過使用async關(guān)鍵字聲明一個(gè)函數(shù)為異步函數(shù),并使用await關(guān)鍵字等待Pro
發(fā)表于 03-06 14:44
在mdk里面可以利用attribute關(guān)鍵字來將數(shù)組存放在外擴(kuò)的SDRAM里面。但是在cubeide里面這樣做就會(huì)報(bào)錯(cuò),哪位大佬可以解釋一下
發(fā)表于 03-06 07:25
inline關(guān)鍵字是C99標(biāo)準(zhǔn)的型關(guān)鍵字,其作用是將函數(shù)展開,把函數(shù)的代碼復(fù)制到每一個(gè)調(diào)用處。
發(fā)表于 02-19 12:20
?557次閱讀
文件夾中隨時(shí)創(chuàng)造TXT文件,如何及時(shí)選出剛創(chuàng)造的文件?或關(guān)鍵字搜索出需要的TXT文件?
發(fā)表于 02-06 15:22
GDB: ``` $ sudo apt install gdb ``` 安裝完成后,需要安裝Python調(diào)試符號(hào)。這些符號(hào)文件包含了Python解釋器的調(diào)試信息,使得GDB能夠
發(fā)表于 01-31 10:41
?2655次閱讀
谷歌搜索引擎是最受歡迎和廣泛使用的搜索引擎之一,為了使你的網(wǎng)站在谷歌上更好地排名并提高曝光度,你可以采取一些谷歌搜索引擎優(yōu)化的步驟。 使用關(guān)鍵字研究工具,如Google AdWords關(guān)鍵字規(guī)劃工具
發(fā)表于 01-25 10:29
?905次閱讀
在 NVM 和本地\"內(nèi)存中定義數(shù)組(靜態(tài) /global /local)的\"關(guān)鍵字是什么? 還有與 32 位對(duì)齊的關(guān)鍵字怎么樣。
發(fā)表于 01-25 07:52
評(píng)論