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

Python asyncio常用函數(shù)使用詳解

 更新時(shí)間:2023年03月14日 10:19:24   作者:拾牙慧者  
Asyncio在經(jīng)過一段時(shí)間的發(fā)展以及獲取Curio等第三方庫的經(jīng)驗(yàn)來提供更多的功能,目前高級功能也基本完善,但是相對于其他語言,Python的Asyncio高級功能還是不夠的,但好在Asyncio的低級API也比較完善

協(xié)程的定義

需要使用 async def 語句

協(xié)程可以做哪些事:

1、等待一個(gè)future結(jié)果

2、等待另一個(gè)協(xié)程(產(chǎn)生一個(gè)結(jié)果或引發(fā)一個(gè)異常)

3、產(chǎn)生一個(gè)結(jié)果給正在等它的協(xié)程

4、引發(fā)一個(gè)異常給正在等它的協(xié)程

協(xié)程的運(yùn)行

調(diào)用協(xié)程函數(shù),協(xié)程不會開始運(yùn)行,只是返回一個(gè)協(xié)程對象

要讓協(xié)程對象運(yùn)行有兩種方式:

1、在另一個(gè)已經(jīng)運(yùn)行的協(xié)程中用await等待它

2、通過ensure_future函數(shù)計(jì)劃它的執(zhí)行

只有某線程的loop運(yùn)行了,協(xié)程才可能運(yùn)行

下面的例子:

先拿到當(dāng)前線程缺省的loop,然后將協(xié)程對象交給loop.run_until_complete,協(xié)程對象隨后會在loop里得到運(yùn)行

loop = asyncio.get_event_loop()
loop.run_until_complete(do_some_work(3))

run_until_complete是一個(gè)阻塞調(diào)用,知道協(xié)程運(yùn)行結(jié)束才返回

它的參數(shù)是一個(gè)future,但是我們傳給它的卻是協(xié)程對象,它在內(nèi)部做了檢查,通過ensure_future函數(shù)把協(xié)程對象包裝成了future

我們可以這樣寫:

loop.run_until_complete(asyncio.ensure_future(do_some_work(3)))

多個(gè)協(xié)程運(yùn)行

多個(gè)協(xié)程在一個(gè)loop里運(yùn)行,為了把多個(gè)協(xié)程交給loop,需要借助asyncio.gathre函數(shù)

loop.run_until_complete(asyncio.gather(do_some_work(1), do_some_work(3)))

或者先將協(xié)程對象存到list中,這種比較常見

loop = asyncio.get_event_loop() #獲取當(dāng)前線程loop
coros_list = []
for i in range(2000):
    coros_list.append(main(i))
loop.run_until_complete(asyncio.gather(*coros_list))

gather 起聚合的作用,把多個(gè) futures 包裝成單個(gè) future,因?yàn)?loop.run_until_complete 只接受單個(gè) future。

關(guān)于loop.close()

簡單來說,loop 只要不關(guān)閉,就還可以再運(yùn)行。:

loop = asyncio.get_event_loop() #獲取當(dāng)前線程loop
loop.run_until_complete(do_some_work(loop, 1))
loop.run_until_complete(do_some_work(loop, 3))
loop.close()

但是如果關(guān)閉了,就不能再運(yùn)行了:

loop = asyncio.get_event_loop() #獲取當(dāng)前線程loop
loop.run_until_complete(do_some_work(loop, 1))
loop.close()
loop.run_until_complete(do_some_work(loop, 3))  # 此處異常

回調(diào)

加入?yún)f(xié)程是一個(gè)IO的讀操作,等他讀完數(shù)據(jù)后,我們希望得到通知,以便下一步數(shù)據(jù)的處理。這個(gè)可以向future添加回調(diào)實(shí)現(xiàn)

def done_callback(futu):
    print('Done')
futu = asyncio.ensure_future(do_some_work(3))
futu.add_done_callback(done_callback)
loop.run_until_complete(futu)

事件循環(huán)

事件循環(huán)會運(yùn)行異步任務(wù)和回調(diào),執(zhí)行網(wǎng)絡(luò)IO操作,以及運(yùn)行子進(jìn)程

從asyncio event loop policy文檔,我們得知, event loop policy是一個(gè)進(jìn)程全局對象,控制對該進(jìn)程內(nèi)所有event loop的管理。

進(jìn)程的全局policy定義了該policy管控的context的含義,在每個(gè)context中管理分開獨(dú)立的event loop. 默認(rèn)的policy定義的context就是當(dāng)前的線程, 也就是說不同的線程是不同的context,因此有不同的event loop。

獲取事件循環(huán)

asyncio.get_running_loop() # 返回當(dāng)前os線程中正在運(yùn)行的事件循環(huán)
asyncio.get_event_loop() # 獲取當(dāng)前事件循環(huán)
asyncio.set_event_loop(loop) # 獲取當(dāng)前事件循環(huán)
asyncio.new_event_loop() # 創(chuàng)建并返回一個(gè)新的事件循環(huán)對象

asyncio.get_event_loop()

若:

  • 當(dāng)前線程為主線程
  • 當(dāng)前線程沒有啟動event loop

調(diào)用asyncio.get_event_loop()方法會生成一個(gè)新的默認(rèn)event loop,并設(shè)置為當(dāng)前線程的事件循環(huán)。

此時(shí),get_event_loop()相當(dāng)于:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

到此這篇關(guān)于Python asyncio常用函數(shù)使用詳解的文章就介紹到這了,更多相關(guān)Python asyncio內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)把數(shù)字轉(zhuǎn)換成中文

    Python實(shí)現(xiàn)把數(shù)字轉(zhuǎn)換成中文

    這篇文章主要介紹了Python實(shí)現(xiàn)把數(shù)字轉(zhuǎn)換成中文,一般用于數(shù)字金額轉(zhuǎn)中文大寫金額,即將阿拉伯?dāng)?shù)字轉(zhuǎn)換為大寫的中文,需要的朋友可以參考下
    2015-06-06
  • 關(guān)于np.meshgrid函數(shù)中的indexing參數(shù)問題

    關(guān)于np.meshgrid函數(shù)中的indexing參數(shù)問題

    Meshgrid函數(shù)在二維與三維空間中用于生成坐標(biāo)網(wǎng)格,便于進(jìn)行圖像處理和空間數(shù)據(jù)分析,二維情況下,默認(rèn)使用笛卡爾坐標(biāo)系,而三維meshgrid則涉及不同的坐標(biāo)軸取法,在三維情況下,可能會出現(xiàn)坐標(biāo)軸排列序混亂
    2024-09-09
  • 最新python 字符串?dāng)?shù)組互轉(zhuǎn)問題

    最新python 字符串?dāng)?shù)組互轉(zhuǎn)問題

    這篇文章主要介紹了最新python 字符串?dāng)?shù)組互轉(zhuǎn)問題,主要介紹了字符串轉(zhuǎn)list數(shù)組問題和list數(shù)組轉(zhuǎn)字符串問題,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • python生成特定分布數(shù)的實(shí)例

    python生成特定分布數(shù)的實(shí)例

    今天小編就為大家分享一篇python生成特定分布數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法實(shí)例分析

    Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法實(shí)例分析

    這篇文章主要介紹了Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法,結(jié)合實(shí)例形式分析了Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”相關(guān)功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • django中只使用ModleForm的表單驗(yàn)證

    django中只使用ModleForm的表單驗(yàn)證

    這篇文章主要介紹了django中只使用ModleForm的表單驗(yàn)證的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 利用Python展示文件下載進(jìn)度條

    利用Python展示文件下載進(jìn)度條

    這篇文章主要介紹了Python展示文件下載進(jìn)度條,requests庫相信大家都用過,做接口測試少不了它。其實(shí)我們平時(shí)下載文件,也可以用requests做到的,通過一些地址,下面我們就來看看具體是什么樣的地址及詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • pytest參數(shù)化:@pytest.mark.parametrize詳解

    pytest參數(shù)化:@pytest.mark.parametrize詳解

    pytest.mark.parametrize裝飾器能夠?qū)y試函數(shù)進(jìn)行參數(shù)化處理,使得一個(gè)測試函數(shù)可以用多組數(shù)據(jù)執(zhí)行多次,這有助于檢查不同輸入下的期望輸出是否匹配,提高測試的效率和覆蓋率,裝飾器可以應(yīng)用于函數(shù)、模塊或類,支持多個(gè)裝飾器組合使用,增強(qiáng)測試的靈活性和綜合性
    2024-10-10
  • 三個(gè)520專屬Python表白代碼分享

    三個(gè)520專屬Python表白代碼分享

    快到520了,這篇文章主要為大家介紹了三個(gè)520專屬Python表白代碼。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起動手試一試
    2022-05-05
  • Python超詳細(xì)講解元類的使用

    Python超詳細(xì)講解元類的使用

    在Python里一切都是對象(object),基本數(shù)據(jù)類型,如數(shù)字,字符串,函數(shù)都是對象。對象可以由類(class)進(jìn)行創(chuàng)建。那么既然一切都是對象,那么類是對象嗎?是的,類也是對象,那么又是誰創(chuàng)造了類呢?答案也很簡單,也是類,一個(gè)能創(chuàng)作類的類,稱之為(type)元類
    2022-06-06

最新評論