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

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

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

協(xié)程的定義

需要使用 async def 語句

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

1、等待一個future結果

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

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

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

協(xié)程的運行

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

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

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

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

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

下面的例子:

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

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

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

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

我們可以這樣寫:

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

多個協(xié)程運行

多個協(xié)程在一個loop里運行,為了把多個協(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() #獲取當前線程loop
coros_list = []
for i in range(2000):
    coros_list.append(main(i))
loop.run_until_complete(asyncio.gather(*coros_list))

gather 起聚合的作用,把多個 futures 包裝成單個 future,因為 loop.run_until_complete 只接受單個 future。

關于loop.close()

簡單來說,loop 只要不關閉,就還可以再運行。:

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

但是如果關閉了,就不能再運行了:

loop = asyncio.get_event_loop() #獲取當前線程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é)程是一個IO的讀操作,等他讀完數(shù)據(jù)后,我們希望得到通知,以便下一步數(shù)據(jù)的處理。這個可以向future添加回調(diào)實現(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)會運行異步任務和回調(diào),執(zhí)行網(wǎng)絡IO操作,以及運行子進程

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

進程的全局policy定義了該policy管控的context的含義,在每個context中管理分開獨立的event loop. 默認的policy定義的context就是當前的線程, 也就是說不同的線程是不同的context,因此有不同的event loop。

獲取事件循環(huán)

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

asyncio.get_event_loop()

若:

  • 當前線程為主線程
  • 當前線程沒有啟動event loop

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

此時,get_event_loop()相當于:

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

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

相關文章

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

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

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

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

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

    最新python 字符串數(shù)組互轉問題

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

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

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

    Python注釋、分支結構、循環(huán)結構、偽“選擇結構”用法實例分析

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

    django中只使用ModleForm的表單驗證

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

    利用Python展示文件下載進度條

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

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

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

    三個520專屬Python表白代碼分享

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

    Python超詳細講解元類的使用

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

最新評論