CodeGym/Adesua ahorow/Python SELF TW/非同步迭代器和生成器

非同步迭代器和生成器

開放

10.1 AsyncIterator

非同步迭代器 (AsyncIterator) 允許你處理那些會異步生成元素的數據序列。 它們用於非同步函數和協程中,來迭代那些可能會延遲獲取的數據,比如來自 網路請求的數據、非同步I/O操作或者其他非同步來源。

非同步迭代器

非同步迭代器需要實現兩個方法:

方法 __aiter__():

這個方法應該返回非同步迭代器本身。它類似於同步迭代器的 __iter__() 方法。

方法 __anext__():

這個方法應該異步返回下一個值或拋出 StopAsyncIteration 異常, 如果元素已經用完的話。它類似於同步迭代器的 __next__() 方法。

範例:

import asyncio

class AsyncIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __aiter__(self):
        return self

    async def __anext__(self)(self):
        if self.current >= self.end:
            raise StopAsyncIteration

        await asyncio.sleep(1)  # 模擬異步延遲
        self.current += 1
        return self.current

async def main():
    async for number in AsyncIterator(1, 5):
        print(number)

asyncio.run(main())

非同步迭代器允許在數據到達時處理它們,而不會阻塞其他任務的執行。 這對於處理網路請求和其他非同步操作特別有用。

使用非同步迭代器可以更易讀且易於維護地非同步處理數據序列。

10.2 AsyncGenerator

非同步生成器允許你使用 asyncawait 關鍵字來異步生成值。 它們與普通生成器類似,但可以暫停執行以進行非同步操作。

創建非同步生成器

非同步生成器通過使用 async defyield 來定義。 非同步生成器可以在其中使用 await 來進行非同步操作。

範例:

async def async_generator():
    for i in range(3):
        await asyncio.sleep(1)  # 非同步延遲
        yield i  # 生成值

使用非同步生成器

非同步生成器在非同步函數中使用 async for 操作符。

import asyncio

async def main():
    async for value in async_generator():
        print(value)

asyncio.run(main())

非同步生成器通過簡單的語法結構 async for 使得異步序列的處理更加可讀且易於維護。

2
任務
Python SELF TW,  等級 26課堂 3
上鎖
非同步迭代器
非同步迭代器
2
任務
Python SELF TW,  等級 26課堂 3
上鎖
非同步生成器
非同步生成器
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言