欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

Python 中的異步函數(shù)

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

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

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

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

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

使用睡眠語句

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

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

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

Python 庫和函數(shù)

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

語法是:

async def fun_a(t):

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

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

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

await asyncio.sleep(1)

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

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

語法是:

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

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

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

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

my_loop = asyncio.get_event_loop()

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

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

my_loop.run_until_complete(main())

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

異步代碼

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

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 庫。 這個庫有一個調(diào)用異步函數(shù)并發(fā)運(yùn)行的必需函數(shù); 他們已經(jīng)用語法進(jìn)行了討論。

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

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

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

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

我們終于來到了最后兩行。 在倒數(shù)第二行,我們調(diào)用了 get_event_loop 函數(shù)來創(chuàng)建一個循環(huán)。 在最后一行,使用我們的循環(huán),我們調(diào)用了 run_until_complete 函數(shù)來開始異步運(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]

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

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

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

相關(guān)文章

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

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

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

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

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

    Python中的?pass?占位語句

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

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

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

    python繪制簡單彩虹圖

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

    讓python json encode datetime類型

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

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

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

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

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

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

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

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

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

最新評論