Python協(xié)程怎樣實(shí)現(xiàn)并發(fā)處理

小樊
81
2024-11-09 12:20:42

在Python中,協(xié)程是實(shí)現(xiàn)并發(fā)處理的一種有效方式。協(xié)程允許你在一個(gè)函數(shù)執(zhí)行過(guò)程中掛起(yield),然后在稍后的時(shí)間點(diǎn)從同一位置恢復(fù)執(zhí)行(resume)。這使得你可以在單個(gè)線程中同時(shí)處理多個(gè)任務(wù),而無(wú)需多線程或多進(jìn)程的開(kāi)銷(xiāo)。

要實(shí)現(xiàn)協(xié)程并發(fā)處理,你可以使用asyncio庫(kù),它是Python 3.4及更高版本中的標(biāo)準(zhǔn)庫(kù)。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用asyncio協(xié)程實(shí)現(xiàn)并發(fā)處理:

import asyncio

async def task(name, seconds):
    print(f"{name} 開(kāi)始執(zhí)行")
    await asyncio.sleep(seconds)
    print(f"{name} 執(zhí)行完成")

async def main():
    # 創(chuàng)建任務(wù)列表
    tasks = [
        asyncio.create_task(task("A", 1)),
        asyncio.create_task(task("B", 2)),
        asyncio.create_task(task("C", 3)),
    ]

    # 等待所有任務(wù)完成
    await asyncio.gather(*tasks)

# 運(yùn)行事件循環(huán)
asyncio.run(main())

在這個(gè)示例中,我們定義了一個(gè)名為task的協(xié)程函數(shù),它接受一個(gè)名稱和一個(gè)秒數(shù)作為參數(shù)。在函數(shù)內(nèi)部,我們使用await asyncio.sleep(seconds)掛起協(xié)程執(zhí)行指定的秒數(shù)。然后,我們定義了一個(gè)名為main的協(xié)程函數(shù),用于創(chuàng)建和管理任務(wù)列表。最后,我們使用asyncio.run(main())啟動(dòng)事件循環(huán)并運(yùn)行main協(xié)程。

當(dāng)你運(yùn)行這個(gè)程序時(shí),你會(huì)看到A、B和C三個(gè)任務(wù)并發(fā)執(zhí)行。盡管它們的執(zhí)行順序可能不同,但它們的總執(zhí)行時(shí)間仍然是3秒(B任務(wù)等待2秒,C任務(wù)等待3秒)。這就是協(xié)程實(shí)現(xiàn)并發(fā)處理的優(yōu)勢(shì)。

0