亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python?中的異步?for?循環(huán)示例詳解

 更新時(shí)間:2023年05月31日 15:06:22   作者:跡憶客  
這篇文章主要介紹了Python中的異步for循環(huán),我們將討論 Python 庫(kù) asyncio 和運(yùn)行異步代碼所需的函數(shù),需要的朋友可以參考下

本篇文章將提供有關(guān) Python 中異步 for 循環(huán)的完整詳細(xì)信息。 我們將討論異步函數(shù)、異步 for 循環(huán)和睡眠概念。

接下來(lái),我們將討論 Python 庫(kù) asyncio 和運(yùn)行異步代碼所需的函數(shù)。 最后,我們將看到幾個(gè) Python 示例,以充分理解這個(gè)概念。

Python 中的異步函數(shù)

異步函數(shù)有助于與同一程序的其他函數(shù)并行運(yùn)行繁重的任務(wù)(如批處理程序,也許我們對(duì)在后臺(tái)運(yùn)行進(jìn)程感興趣)。 當(dāng)函數(shù)不相互依賴(lài)或不完全相互依賴(lài)時(shí),可以并行運(yùn)行函數(shù)。

同步函數(shù)在任務(wù)完成后返回控制權(quán),而異步函數(shù)返回控制權(quán)以并行運(yùn)行其他函數(shù)/代碼并在一段時(shí)間后取回控制權(quán)。 這樣,不僅完成了繁重的任務(wù),還并行完成了許多其他任務(wù)。

從技術(shù)上講,同步函數(shù)會(huì)阻塞主函數(shù)的控制,而異步函數(shù)的執(zhí)行不會(huì)阻塞主函數(shù)。 這樣,主函數(shù)可以并行運(yùn)行多個(gè)異步函數(shù)。

Python 中的異步 for 循環(huán)

對(duì)于同步循環(huán),它們?cè)跊](méi)有任何暫停/給予控制的情況下執(zhí)行; 但是,要使它們異步,我們必須在一些異步函數(shù)中定義它們。 此外,我們需要在這個(gè)過(guò)程中休眠一段時(shí)間,以控制其他一些功能。

使用睡眠語(yǔ)句

進(jìn)程/線(xiàn)程/函數(shù)可能會(huì)休眠一段時(shí)間; 你可以考慮休息一下。 但是,目的是在一段時(shí)間內(nèi)失去控制。

結(jié)果,其他一些功能獲得了控制權(quán)。 一段時(shí)間后,控制返回,功能恢復(fù)。

現(xiàn)在,是時(shí)候轉(zhuǎn)向 Python 中的實(shí)現(xiàn)了。 我們將逐步討論語(yǔ)法部分,最后,我們將展示完整的代碼。

Python 庫(kù)和函數(shù)

asyncio 是 Python 中的一個(gè)庫(kù),用于使用 async/await 語(yǔ)法編寫(xiě)并發(fā)程序/函數(shù)。 async 是每個(gè)函數(shù)開(kāi)頭使用的關(guān)鍵字(用于創(chuàng)建異步函數(shù))。

語(yǔ)法是:

async def fun_a(t):

這里加入了 async ,將這個(gè)函數(shù)聲明為異步函數(shù)。

sleep 函數(shù)可以暫停協(xié)程的執(zhí)行一段時(shí)間。 協(xié)程是在執(zhí)行過(guò)程中構(gòu)成管道結(jié)構(gòu)的進(jìn)程/函數(shù)。

該函數(shù)通過(guò) await 關(guān)鍵字自愿離開(kāi) CPU 去執(zhí)行另一個(gè)協(xié)作任務(wù)。 睡眠函數(shù)的語(yǔ)法是:

await asyncio.sleep(1)

await 關(guān)鍵字將控制權(quán)返回給事件循環(huán)。 您可能會(huì)考慮,如果使用 await 命令調(diào)用異步函數(shù),則 sleep 語(yǔ)句(在 for 循環(huán)內(nèi))控制協(xié)作進(jìn)程直到睡眠。

gather 函數(shù)將多個(gè)協(xié)作進(jìn)程(技術(shù)上稱(chēng)為協(xié)程)組合起來(lái)作為一個(gè)單元運(yùn)行。 此函數(shù)按照在 gather 調(diào)用中編寫(xiě)的函數(shù)的順序返回結(jié)果元組。

語(yǔ)法是:

results = await asyncio.gather(fun_a(5), fun_b(5))

在這里,我們正在制作 fun_a 和 fun_b 的管道,以便它們可以同時(shí)運(yùn)行。

事件循環(huán)是每個(gè)異步應(yīng)用程序的主要組成部分。 事件循環(huán)運(yùn)行異步函數(shù)。

get_event_loop() 方法檢查是否尚未調(diào)用 set_event_loop ,它將創(chuàng)建一個(gè)事件循環(huán)并將其設(shè)置為當(dāng)前。 語(yǔ)法是:

my_loop = asyncio.get_event_loop()

如果在循環(huán)已創(chuàng)建時(shí)再次執(zhí)行此命令,則它不會(huì)執(zhí)行任何操作。 但是,在第一次調(diào)用中,沒(méi)有創(chuàng)建循環(huán); 因此,它將創(chuàng)建一個(gè)異步循環(huán)。

如果 get_event_loop() 返回的循環(huán)是異步的,則 run_until_complete() 用于并發(fā)運(yùn)行事件循環(huán)。 語(yǔ)法是:

my_loop.run_until_complete(main())

如果主函數(shù)是異步的,則此語(yǔ)句將并發(fā)運(yùn)行代碼。

異步代碼

對(duì)運(yùn)行異步函數(shù)/例程/進(jìn)程所需的概念和 Python 庫(kù)有了清晰的認(rèn)識(shí),是時(shí)候看一個(gè)完整的編碼示例了:

import asyncio
async def fun_a(t):
    for i in range(t):
        print("fun_a", end=' ')
        await asyncio.sleep(1)
    return 1
async def fun_b(t):
    for i in range(t):
        print("fun_b", end=' ')
        await asyncio.sleep(1)
    return 2
async def main():
    results = await asyncio.gather(fun_a(5), fun_b(5))
    print(results)
my_loop = asyncio.get_event_loop()
my_loop.run_until_complete(main())

在這段代碼的頂部(第一行),我們導(dǎo)入了 asyncio 庫(kù)。 這個(gè)庫(kù)有一個(gè)調(diào)用異步函數(shù)并發(fā)運(yùn)行的必需函數(shù); 他們已經(jīng)用語(yǔ)法進(jìn)行了討論。

接下來(lái),我們有兩個(gè)異步函數(shù)—— fun_afun_b,我們希望它們同時(shí)運(yùn)行。 同樣,我們想從主函數(shù)調(diào)用異步函數(shù)。 因此,main 也被創(chuàng)建為一個(gè)異步函數(shù)。

另外,請(qǐng)注意我們將 5 傳遞給我們的函數(shù)以在其中運(yùn)行五次循環(huán)。 所以稍后,您可以看到輸出并得到循環(huán)沒(méi)有完全運(yùn)行的想法; 每個(gè)都進(jìn)入睡眠狀態(tài)并控制另一個(gè)功能。

我們將在輸出后重復(fù)這一點(diǎn)。

在 main 函數(shù)中,我們調(diào)用了 gather 函數(shù)并傳遞了我們的異步函數(shù),以便它們可以并行運(yùn)行。 gather 函數(shù)返回一個(gè)元組,它有兩個(gè)從我們的目標(biāo)異步函數(shù)返回的值。

我們終于來(lái)到了最后兩行。 在倒數(shù)第二行,我們調(diào)用了 get_event_loop 函數(shù)來(lái)創(chuàng)建一個(gè)循環(huán)。 在最后一行,使用我們的循環(huán),我們調(diào)用了 run_until_complete 函數(shù)來(lái)開(kāi)始異步運(yùn)行我們的主函數(shù)。

此代碼的輸出是:

fun_a fun_b fun_a fun_b fun_a fun_b fun_a fun_b fun_a fun_b [1, 2]

首先,請(qǐng)注意我們的循環(huán)并不完全像傳統(tǒng)代碼那樣運(yùn)行; 相反,兩個(gè)循環(huán)同時(shí)運(yùn)行。 您可以看到兩個(gè)函數(shù) print 語(yǔ)句的結(jié)果。

最后,[1, 2] 是主函數(shù)從我們的異步函數(shù)接收到的元組。 1 和 2 由我們的異步函數(shù)返回,并按照我們?cè)?gather 函數(shù)中編寫(xiě)這些函數(shù)的順序排列。

到此這篇關(guān)于Python 中的異步 for 循環(huán)的文章就介紹到這了,更多相關(guān)Python異步 for 循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python selenium+cookie實(shí)現(xiàn)免密登陸的示例代碼

    Python selenium+cookie實(shí)現(xiàn)免密登陸的示例代碼

    本文主要介紹了Python selenium+cookie實(shí)現(xiàn)免密登陸的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)

    python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Python中的?pass?占位語(yǔ)句

    Python中的?pass?占位語(yǔ)句

    這篇文章主要介紹了Python中的?pass?占位語(yǔ)句,Python?pass是空語(yǔ)句,是為了保持程序結(jié)構(gòu)的完整性,下文具體的相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • Python實(shí)現(xiàn)的徑向基(RBF)神經(jīng)網(wǎng)絡(luò)示例

    Python實(shí)現(xiàn)的徑向基(RBF)神經(jīng)網(wǎng)絡(luò)示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的徑向基(RBF)神經(jīng)網(wǎng)絡(luò),結(jié)合完整實(shí)例形式分析了Python徑向基(RBF)神經(jīng)網(wǎng)絡(luò)定義與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-02-02
  • python繪制簡(jiǎn)單彩虹圖

    python繪制簡(jiǎn)單彩虹圖

    這篇文章主要為大家詳細(xì)介紹了python繪制簡(jiǎn)單彩虹圖的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 讓python json encode datetime類(lèi)型

    讓python json encode datetime類(lèi)型

    python2.6+ 自帶的json模塊,不支持datetime的json encode,每次都需要手動(dòng)轉(zhuǎn)為字符串,很累人,我們可以自己封裝一個(gè)簡(jiǎn)單的方法處理此問(wèn)題。
    2010-12-12
  • Python實(shí)現(xiàn)簡(jiǎn)繁體轉(zhuǎn)換

    Python實(shí)現(xiàn)簡(jiǎn)繁體轉(zhuǎn)換

    很多時(shí)候簡(jiǎn)繁體轉(zhuǎn)換,掌握了簡(jiǎn)體與繁體的轉(zhuǎn)換,往往能夠事半功倍,本文主要介紹了Python實(shí)現(xiàn)簡(jiǎn)繁體轉(zhuǎn)換,感興趣的可以了解一下
    2021-06-06
  • 基于Python實(shí)現(xiàn)溫度轉(zhuǎn)換程序

    基于Python實(shí)現(xiàn)溫度轉(zhuǎn)換程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)簡(jiǎn)單的溫度轉(zhuǎn)換程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 簡(jiǎn)單介紹Python中利用生成器實(shí)現(xiàn)的并發(fā)編程

    簡(jiǎn)單介紹Python中利用生成器實(shí)現(xiàn)的并發(fā)編程

    這篇文章主要介紹了簡(jiǎn)單介紹Python中利用生成器實(shí)現(xiàn)的并發(fā)編程,使用yield生成器函數(shù)進(jìn)行多進(jìn)程編程是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要知識(shí),需要的朋友可以參考下
    2015-05-05
  • 選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢(shì)

    選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢(shì)

    在本篇文章中小編給大家整理了關(guān)于選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢(shì),對(duì)此有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2019-06-06

最新評(píng)論