Python 協(xié)程(Coroutine)是一種輕量級(jí)的線程,它可以在執(zhí)行過(guò)程中掛起并在稍后恢復(fù)。協(xié)程可以讓你編寫(xiě)更簡(jiǎn)潔、高效的異步代碼。在 Python 中,協(xié)程主要通過(guò) async
和 await
關(guān)鍵字實(shí)現(xiàn)。
以下是協(xié)程如何簡(jiǎn)化編程的一些示例:
async def
定義協(xié)程函數(shù):async def fetch_data(url):
print(f"開(kāi)始獲取數(shù)據(jù):{url}")
# 假設(shè)這里是一個(gè)耗時(shí)操作,例如網(wǎng)絡(luò)請(qǐng)求
await asyncio.sleep(1)
print(f"獲取數(shù)據(jù)完成:{url}")
return {"url": url, "data": "這里是數(shù)據(jù)"}
await
關(guān)鍵字調(diào)用協(xié)程函數(shù):async def main():
url1 = "https://api.example.com/data1"
url2 = "https://api.example.com/data2"
# 使用 await 關(guān)鍵字調(diào)用協(xié)程函數(shù)
result1 = await fetch_data(url1)
result2 = await fetch_data(url2)
print(result1)
print(result2)
# 運(yùn)行協(xié)程
asyncio.run(main())
asyncio.gather
并行執(zhí)行多個(gè)協(xié)程:async def main():
url1 = "https://api.example.com/data1"
url2 = "https://api.example.com/data2"
# 使用 asyncio.gather 并行執(zhí)行多個(gè)協(xié)程
results = await asyncio.gather(fetch_data(url1), fetch_data(url2))
print(results)
# 運(yùn)行協(xié)程
asyncio.run(main())
asyncio.create_task
創(chuàng)建任務(wù):async def main():
url1 = "https://api.example.com/data1"
url2 = "https://api.example.com/data2"
# 使用 asyncio.create_task 創(chuàng)建任務(wù)
task1 = asyncio.create_task(fetch_data(url1))
task2 = asyncio.create_task(fetch_data(url2))
# 等待所有任務(wù)完成
results = await asyncio.gather(task1, task2)
print(results)
# 運(yùn)行協(xié)程
asyncio.run(main())
通過(guò)使用協(xié)程,你可以編寫(xiě)更簡(jiǎn)潔的異步代碼,避免了回調(diào)地獄(Callback Hell)的問(wèn)題。同時(shí),協(xié)程還可以幫助你更有效地利用系統(tǒng)資源,提高程序的性能。