iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0

異步編程進階概念

們將深入探討 Python 的異步編程,介紹一些進階概念和實際應用。學習任務(Tasks)、異步上下文管理器(Asynchronous Context Managers)。這些概念在處理大量併發任務或異步操作時非常有用。

1. 任務(Tasks)

任務是封裝協程的對象,可以使用 asyncio.create_task() 或 loop.create_task() 創建。任務允許協程在事件循環中併發執行,從而實現多任務同時處理。

import asyncio

async def task_1():
    await asyncio.sleep(2)
    print('Task 1 complete')

async def task_2():
    await asyncio.sleep(1)
    print('Task 2 complete')

async def main():
    task1 = asyncio.create_task(task_1())
    task2 = asyncio.create_task(task_2())
    await task1
    await task2

asyncio.run(main())

這裡的 create_task() 方法將協程包裝成任務,使它們能夠併發執行。在這個範例中,兩個任務 task_1 和 task_2 將同時運行,而不是依次運行。
https://ithelp.ithome.com.tw/upload/images/20241007/20168338QIR87EztIL.png

2. 異步上下文管理器(Asynchronous Context Managers)

async with 語法是 Python 提供的異步上下文管理器,用來管理異步操作中的資源釋放。例如,在進行異步文件或網絡操作時,它可以確保連接或文件在使用完後正確釋放。

import asyncio

class AsyncContextManager:
    async def __aenter__(self):
        print('Entering context')
        return self

    async def __aexit__(self, exc_type, exc, tb):
        print('Exiting context')

async def main():
    async with AsyncContextManager():
        print('Inside context')

asyncio.run(main())

當 async with 語句執行時,首先調用 aenter() 方法,輸出 "Entering context"。
然後程式執行 async with 塊內的程式碼,輸出 "Inside context"。
當 async with 塊結束後,會調用 aexit() 方法,輸出 "Exiting context"。
https://ithelp.ithome.com.tw/upload/images/20241007/20168338ztx76nIIdm.png

在這篇文章中,我們介紹了 Python 異步編程中的一些進階概念,包括 任務(Tasks) 和 異步上下文管理器(Asynchronous Context Managers),這些概念在處理併發任務和管理異步資源時非常有用。


上一篇
Python 的異步編程
下一篇
Finally
系列文
Python 新手村——基礎技能養成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言