最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 異步之生成器示例詳解

 更新時(shí)間:2023年03月22日 10:51:30   作者:冷凍工廠  
這篇文章主要為大家介紹了Python 異步之生成器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

生成器是 Python 的基本組成部分。生成器是一個(gè)至少有一個(gè)“yield”表達(dá)式的函數(shù)。它們是可以暫停和恢復(fù)的函數(shù),就像協(xié)程一樣。

實(shí)際上,Python 協(xié)程是 Python 生成器的擴(kuò)展。Asyncio 允許我們開發(fā)異步生成器。我們可以通過(guò)定義一個(gè)使用“yield”表達(dá)式的協(xié)程來(lái)創(chuàng)建一個(gè)異步生成器。

1. 什么是異步生成器

異步生成器是使用 yield 表達(dá)式的協(xié)程。在我們深入了解異步生成器的細(xì)節(jié)之前,讓我們先回顧一下經(jīng)典的 Python 生成器。

1.1. Generators

生成器是一個(gè) Python 函數(shù),它通過(guò) yield 表達(dá)式返回一個(gè)值。

# define a generator
def generator():
	for i in range(10):
		yield i

生成器執(zhí)行到 yield 表達(dá)式,之后返回一個(gè)值。這會(huì)在該點(diǎn)暫停生成器。下一次執(zhí)行生成器時(shí),它將從恢復(fù)點(diǎn)恢復(fù)并運(yùn)行直到下一個(gè) yield 表達(dá)式。

從技術(shù)上講,生成器函數(shù)創(chuàng)建并返回一個(gè)生成器迭代器。生成器迭代器執(zhí)行生成器函數(shù)的內(nèi)容,根據(jù)需要產(chǎn)生和恢復(fù)。

可以使用內(nèi)置函數(shù) next() 分步執(zhí)行生成器。

...
# create the generator
gen = generator()
# step the generator
result = next(gen)

雖然,更常見(jiàn)的是迭代生成器直到完成,例如使用 for 循環(huán)或列表理解。

...
# traverse the generator and collect results
results = [item for item in generator()]

接下來(lái),讓我們仔細(xì)看看異步生成器。

1.2. Asynchronous Generators

異步生成器是使用 yield 表達(dá)式的協(xié)程。與函數(shù)生成器不同,協(xié)程可以調(diào)度和等待其他協(xié)程和任務(wù)。

與經(jīng)典生成器一樣,異步生成器函數(shù)可用于創(chuàng)建可使用內(nèi)置的 anext() 函數(shù)而不是 next() 函數(shù)遍歷的異步生成器迭代器。

這意味著異步生成器迭代器實(shí)現(xiàn)了 anext() 方法并且可以與 async for 表達(dá)式一起使用。

這意味著生成器的每次迭代都被安排并執(zhí)行為可等待的。 “async for”表達(dá)式將調(diào)度并執(zhí)行生成器的每次迭代,暫停調(diào)用協(xié)程并等待結(jié)果。

2. 如何使用異步生成器

在本節(jié)中,我們將仔細(xì)研究如何在 asyncio 程序中定義、創(chuàng)建、步進(jìn)和遍歷異步生成器。

讓我們從如何定義異步生成器開始。

2.1. 定義

我們可以通過(guò)定義一個(gè)至少有一個(gè) yield 表達(dá)式的協(xié)程來(lái)定義一個(gè)異步生成器。

這意味著該函數(shù)是使用“async def”表達(dá)式定義的。

# define an asynchronous generator
async def async_generator():
	for i in range(10)
		yield i

因?yàn)楫惒缴善魇且粋€(gè)協(xié)程,并且每個(gè)迭代器返回一個(gè)在 asyncio 事件循環(huán)中調(diào)度和執(zhí)行的等待對(duì)象,所以我們可以在生成器主體內(nèi)執(zhí)行和等待等待對(duì)象。

# define an asynchronous generator that awaits
async def async_generator():
	for i in range(10)
		# suspend and sleep a moment
		await asyncio.sleep(1)
		# yield a value to the caller
		yield i

接下來(lái),讓我們看看如何使用異步生成器。

2.2. 創(chuàng)建

要使用異步生成器,我們必須創(chuàng)建生成器。這看起來(lái)像是調(diào)用它,而是創(chuàng)建并返回一個(gè)迭代器對(duì)象。

...
# create the iterator
it = async_generator()

這將返回一種稱為異步生成器迭代器的異步迭代器。

2.3. 一步

可以使用 anext() 內(nèi)置函數(shù)遍歷生成器的一個(gè)步驟,就像使用 next() 函數(shù)的經(jīng)典生成器一樣。

結(jié)果是等待的可等待對(duì)象。

...
# get an awaitable for one step of the generator
awaitable = anext(gen)
# execute the one step of the generator and get the result
result = await awaitable

這可以一步實(shí)現(xiàn)。

...
# step the async generator
result = await anext(gen)

2.4. 遍歷

還可以使用“async for”表達(dá)式在循環(huán)中遍歷異步生成器,該表達(dá)式將自動(dòng)等待循環(huán)的每次迭代。

...
# traverse an asynchronous generator
async for result in async_generator():
	print(result)

我們還可以使用帶有“async for”表達(dá)式的異步列表理解來(lái)收集生成器的結(jié)果。

...
# async list comprehension with async generator
results = [item async for item in async_generator()]

3. 異步生成器示例

我們可以探索如何使用“async for”表達(dá)式遍歷異步生成器。

在此示例中,我們將更新之前的示例以使用“async for”循環(huán)遍歷生成器直至完成。

此循環(huán)將自動(dòng)等待從生成器返回的每個(gè)可等待對(duì)象,檢索產(chǎn)生的值,并使其在循環(huán)體內(nèi)可用,以便在這種情況下可以報(bào)告它。

這可能是異步生成器最常見(jiàn)的使用模式。

# SuperFastPython.com
# example of asynchronous generator with async for loop
import asyncio
# define an asynchronous generator
async def async_generator():
    # normal loop
    for i in range(10):
        # block to simulate doing work
        await asyncio.sleep(1)
        # yield the result
        yield i
# main coroutine
async def main():
    # loop over async generator with async for loop
    async for item in async_generator():
        print(item)
# execute the asyncio program
asyncio.run(main())

運(yùn)行示例首先創(chuàng)建 main() 協(xié)程并將其用作 asyncio 程序的入口點(diǎn)。main() 協(xié)程運(yùn)行并啟動(dòng) for 循環(huán)。

異步生成器的一個(gè)實(shí)例被創(chuàng)建,循環(huán)使用 anext() 函數(shù)自動(dòng)單步執(zhí)行它以返回一個(gè)可等待對(duì)象。然后循環(huán)等待可等待對(duì)象并檢索一個(gè)值,該值可用于報(bào)告它的循環(huán)體。

然后重復(fù)此過(guò)程,掛起 main() 協(xié)程,執(zhí)行生成器的迭代,然后掛起和恢復(fù) main() 協(xié)程,直到生成器耗盡。

這突出顯示了如何使用 async for 表達(dá)式遍歷異步生成器。

0
1
2
3
4
5
6
7
8
9

以上就是Python 異步之生成器示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 異步生成器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • django 將model轉(zhuǎn)換為字典的方法示例

    django 將model轉(zhuǎn)換為字典的方法示例

    平常的開發(fā)過(guò)程中不免遇到需要把model轉(zhuǎn)成字典的需求,這篇文章主要介紹了Django model轉(zhuǎn)字典的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Python+PyQt6編寫一個(gè)圖片播放器

    Python+PyQt6編寫一個(gè)圖片播放器

    這篇文章主要為大家詳細(xì)介紹了Python如何結(jié)合PyQt6編寫一個(gè)圖片播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下
    2025-02-02
  • Python pygorithm模塊用法示例【常見(jiàn)算法測(cè)試】

    Python pygorithm模塊用法示例【常見(jiàn)算法測(cè)試】

    這篇文章主要介紹了Python pygorithm模塊用法,結(jié)合實(shí)例形式分析了pygorithm模塊的功能、安裝及針對(duì)常見(jiàn)算法的相關(guān)使用操作技巧,需要的朋友可以參考下
    2018-08-08
  • 關(guān)于tf.TFRecordReader()函數(shù)的用法解析

    關(guān)于tf.TFRecordReader()函數(shù)的用法解析

    今天小編就為大家分享一篇關(guān)于tf.TFRecordReader()函數(shù)的用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Django開發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門級(jí))

    Django開發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門級(jí))

    這篇文章主要介紹了Django開發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門級(jí)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Jupyter Notebook 如何修改字體和大小以及更改字體樣式

    Jupyter Notebook 如何修改字體和大小以及更改字體樣式

    這篇文章主要介紹了Jupyter Notebook 如何修改字體和大小以及更改字體樣式的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 解決virtualenv -p python3 venv報(bào)錯(cuò)的問(wèn)題

    解決virtualenv -p python3 venv報(bào)錯(cuò)的問(wèn)題

    這篇文章主要介紹了解決virtualenv -p python3 venv報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • python繪制規(guī)則網(wǎng)絡(luò)圖形實(shí)例

    python繪制規(guī)則網(wǎng)絡(luò)圖形實(shí)例

    今天小編大家分享一篇python繪制規(guī)則網(wǎng)絡(luò)圖形實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Django開發(fā)中復(fù)選框用法示例

    Django開發(fā)中復(fù)選框用法示例

    這篇文章主要介紹了Django開發(fā)中復(fù)選框用法,結(jié)合實(shí)例形式分析了Django基于ajax的復(fù)選框遍歷、提交及后臺(tái)數(shù)據(jù)庫(kù)查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • python 爬取嗶哩嗶哩up主信息和投稿視頻

    python 爬取嗶哩嗶哩up主信息和投稿視頻

    本項(xiàng)目主要功能是爬取部分嗶哩嗶哩up主信息和up主投稿視頻信息,用作數(shù)據(jù)處理與分析學(xué)習(xí)(不得用于商業(yè)和其他侵犯他人權(quán)益的用途)。有此需求的朋友可以了解下本項(xiàng)目
    2021-06-06

最新評(píng)論

姚安县| 金昌市| 福建省| 正安县| 高要市| 阳信县| 巴里| 安徽省| 辽源市| 金沙县| 塔河县| 柳林县| 信丰县| 图木舒克市| 周宁县| 沽源县| 九江县| 汤阴县| 成都市| 遵化市| 峡江县| 富源县| 阳高县| 北宁市| 杭州市| 乃东县| 肥乡县| 鸡东县| 昌图县| 四子王旗| 诏安县| 河源市| 京山县| 台江县| 大埔区| 门头沟区| 武清区| 宁晋县| 临夏县| 伊宁县| 台北县|