簡體   English   中英

生成器函數和異步生成器函數的目的之間有什么區別

[英]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.

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