[英]What are the differences between the purposes of generator functions and asynchronous generator functions
在Python中,異步生成器函數是協同程序,生成器函數也是協同程序。
生成器函數和異步生成器函數的目的有什么區別?
謝謝。
PEP 525的目的- 異步發生器與PEP 255 -引入發生器的簡單發生器非常相似。 它主要是為了使事情更容易實現,只在不同的域(異步域)。 從PEP 525:
從本質上講,應用於異步執行情況的PEP 255的目標和基本原理也適用於此提議。
簡而言之,它使編寫支持異步迭代協議的對象變得容易。 正如生成器為迭代器協議所做的那樣。
您不必定義實現__aiter__
和__anext__
對象,而是創建一個異步生成器,通過魔術來實現這一點。 這反映了生成器為迭代器協議所做的事情; 而不是為對象實現__iter__
和__next__
,您可以創建一個生成器。
這在PEP 525的理性中得到了很好的說明,它還包含一個很好的例子,它顯示了在使用異步生成器時編寫的代碼所節省的成本。
除了代碼長度節省,異步生成器也表現得更好:
性能是此提議的另一個要點:在我們對參考實現的測試中,異步生成器比作為異步迭代器實現的等效生成器快2倍。
只是在這里添加一些術語,因為有時難以跟蹤術語:
yield
表達式的def
函數。 types.coroutine
包裝的生成器( def
+ yield
)。 如果需要將它包含在coroutine對象中,則需要將其包裝在types.coroutine
。 yield
表達式的async def
函數。 這些也可以包含await
表達式。 async def
await
s和沒有yield
s。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.