asyncio學(xué)習(xí)筆記(基于micropython1.24)
python async異步編程(asyncio 學(xué)python必備)UP主:武沛齊
- yield 裝飾器
- @asyncio.coroutine
- request
response = request.get(url)
filename = url.rsplit('_')[-1]
with open (filename, mode = 'wb') as file_object:
b
file_object.write(response.content)
aiohttp
async def fetch(session, url)
async with session.get(url, verify_ssl = false) as reponse:
content = await response.content.read()
async def main():
async with aiohttp.ClientSession() as sessiion:
url_list = [...]
tasks = [async.creat_task(fetch(session,url))for url in url_list ]
await asyncio.wait(tasks)
- async with:異步上下文管理器, session.get() 一個(gè)上下文管理器對象,
- [ ]
Q1:async def和def有什么區(qū)別?能否這樣理解:若函數(shù)中出現(xiàn)async語句,則必須使用async def?
- 普通函數(shù)
- 是同步執(zhí)行的,調(diào)用時(shí)會(huì)立即執(zhí)行函數(shù)體中的代碼,直到函數(shù)返回。
- 它們是阻塞式的,即在函數(shù)執(zhí)行期間,程序的其他部分無法運(yùn)行。
- 異步函數(shù)
- 異步執(zhí)行,調(diào)用時(shí)不會(huì)立即執(zhí)行函數(shù)體中的代碼,而是返回一個(gè)
coroutine對象。 - 需要使用 await 或 asyncio.run() 等方式來執(zhí)行。
- 它們是非阻塞式的,允許程序在等待異步操作完成時(shí)執(zhí)行其他任務(wù)。
- 在函數(shù)定義中使用 async def ,表示該函數(shù)是一個(gè)異步函數(shù)。
- 在函數(shù)體內(nèi)使用 await ,表示暫停當(dāng)前任務(wù)的執(zhí)行,等待異步操作完成。
- 如果函數(shù)體內(nèi)使用了 await ,則必須使用 async def 定義該函數(shù)。
- 如果函數(shù)體內(nèi)沒有使用 await ,但仍然使用了 async def ,雖然語法上沒有錯(cuò)誤,但這種寫法通常沒有意義,因?yàn)楹瘮?shù)體不會(huì)執(zhí)行任何異步操作。
- 異步執(zhí)行,調(diào)用時(shí)不會(huì)立即執(zhí)行函數(shù)體中的代碼,而是返回一個(gè)
Q2:
posted on 2025-01-21 06:45 Glovesize 閱讀(60) 評論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)