簡體   English   中英

異步上下文中的 Python 協程/生成器術語

[英]Python coroutine/generator terminology in async context

網上說的

當您在 Python 中有一個異步函數(協程)時,您可以使用 async def 聲明它,這會改變其調用的行為方式。 特別是,調用它會立即返回一個協程對象,它基本上是說“我可以使用你調用的參數運行協程,並在你等待我時返回結果”

因此,當您在不等待的情況下調用async函數時,您將返回一個協程。

為什么我要回一個協程,為什么不只是一個生成器 因為我不會向它發送任何未來的輸入。

當協程首次出現在 Python 3.4 中時,它們是使用生成器實現的:

import asyncio
from typing import Generator


@asyncio.coroutine
def test1():
    pass


assert isinstance(test1(), Generator)

並不是因為協程總是應該是生成器,只是碰巧它們是:這是實現它們的最方便的方式。


從 Python 3.5 開始,協程得到了它們的新語法async def / await ,它既干凈又有助於區分抽象(協程)與其實現細節(生成器)。

似乎新式協程也被修補以表明它們不應該被視為生成器:

async def test2():
    pass


assert not isinstance(test2(), Generator)

長話短說:在處理協程時忘記生成器。 如果您使用像協程這樣的異步抽象,您應該使用它們而不是它們的實現細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM