亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python基礎(chǔ)之使用期物處理并發(fā)

asoren / 1260人閱讀

摘要:本文重點掌握異步編程的相關(guān)概念了解期物的概念意義和使用方法了解中的阻塞型函數(shù)釋放的特點。一異步編程相關(guān)概念阻塞程序未得到所需計算資源時被掛起的狀態(tài)。

導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。

本文重點:

1、掌握異步編程的相關(guān)概念;
2、了解期物future的概念、意義和使用方法;
3、了解Python中的阻塞型I/O函數(shù)釋放GIL的特點。
一、異步編程相關(guān)概念

阻塞:程序未得到所需計算資源時被掛起的狀態(tài)。換句話說,程序在等待某個操作完成期間,自身無法繼續(xù)干別的事情,則稱該程序在該操作上是阻塞的。
并發(fā):描述的是程序的組織結(jié)構(gòu)。指程序要被設(shè)計成多個可獨立執(zhí)行的子任務(wù)。并發(fā)以利用有限的計算機(jī)資源使多個任務(wù)可以被實時或近實時執(zhí)行為目的。
并行:指的是多任務(wù)同時執(zhí)行的程序狀態(tài),以利用多核CPU加速完成多任務(wù)為目的。
異步:為完成某個任務(wù),不同程序單元之間過程中無需通信協(xié)調(diào),也能完成任務(wù)的方式。
不相關(guān)的程序單元之間可以是異步的。簡言之,異步意味著無序。
異步編程:以進(jìn)程、線程、協(xié)程、函數(shù)/方法作為執(zhí)行任務(wù)的基本單位,結(jié)合回調(diào),事件循環(huán)、信號量等機(jī)制,以提高整體執(zhí)行效率和并發(fā)能力的編程方式。

二、期物

就下載國旗為目標(biāo)實現(xiàn)的三個客戶端中,兩個HTTP并發(fā)客戶端比依序下載的腳本性能高很多。
由此說明使用并發(fā)可以高效處理網(wǎng)絡(luò)I/O。

期物(future)指一種對象,表示異步執(zhí)行的操作。
期物對象:concurrent.futures.Future或asyncio.Future類的實例。
三大方法:

Executor.submit():創(chuàng)建期物。

concurrent.futures.as_completed():迭代運行結(jié)束的期物,返回一個迭代器。

Executor.map(): 處理參數(shù)不同的同一個可調(diào)用對象。

小結(jié):Executor.submit()加futures.as_completed()的組合比Executor.map()更靈活,因為submit()能處理不同的可調(diào)用對象和參數(shù)。

concurrent.futures模塊的主要特色是ThreadPoolExecutor和ProcessPoolExecutor類,這兩個類實現(xiàn)的接口能分別在不同的線程或進(jìn)程中執(zhí)行可調(diào)用的對象。
注意:通常情況下自己不應(yīng)該創(chuàng)建期物,而只能由并發(fā)框架(concurrent.futures或asyncio)實例化。

實例:concurrent.futures模塊應(yīng)用

from concurrent import futures

from flags import save_flag, get_flag, show, main 

MAX_WORKERS = 20

def download_one(cc): 
    image = get_flag(cc)
    show(cc)
    save_flag(image, cc.lower() + ".gif")
    return cc

def download_many(cc_list):
    workers = min(MAX_WORKERS, len(cc_list))  
    with futures.ThreadPoolExecutor(workers) as executor: 
        res = executor.map(download_one, sorted(cc_list))  

    return len(list(res))

if __name__ == "__main__":
    main(download_many)  
三、阻塞性I/O與GIL

Python標(biāo)準(zhǔn)庫中所有阻塞型I/O函數(shù)都會釋放全局解釋器鎖(GIL),允許其他線程運行。
因此盡管有GIL,Python線程仍然適合在I/O密集型系統(tǒng)使用。

四、線程和多進(jìn)程的替代方案

對CPU密集型工作來說,要啟動多個進(jìn)程,規(guī)避GIL。

創(chuàng)建多進(jìn)程最簡單的方式是使用futures.ProcessPoolExecutor類。

threading和multiprocessing模塊:是Python中多線程和多進(jìn)程并發(fā)的低層實現(xiàn)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44673.html

相關(guān)文章

  • Python中的并發(fā)處理使用asyncio包

    摘要:并發(fā)用于制定方案,用來解決可能但未必并行的問題。在協(xié)程中使用需要注意兩點使用鏈接的多個協(xié)程最終必須由不是協(xié)程的調(diào)用方驅(qū)動,調(diào)用方顯式或隱式在最外層委派生成器上調(diào)用函數(shù)或方法。對象可以取消取消后會在協(xié)程當(dāng)前暫停的處拋出異常。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點: 1、了解asyncio...

    tuniutech 評論0 收藏0
  • Python入門學(xué)習(xí)筆記匯總

    摘要:導(dǎo)語本文章匯總了本人在學(xué)習(xí)基礎(chǔ)之緒論篇數(shù)據(jù)結(jié)構(gòu)篇函數(shù)篇面向?qū)ο笃刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門的朋友們可以按需查看并交流。 導(dǎo)語:本文章匯總了本人在學(xué)習(xí)Python基礎(chǔ)之緒論篇、數(shù)據(jù)結(jié)構(gòu)篇、函數(shù)篇、面向?qū)ο笃?、控制流程篇和元編程篇學(xué)習(xí)筆記的鏈接,打算入門Python的朋友們可以按需查看并交流。 第一部分:緒論篇 1、Python數(shù)據(jù)模型 第二部分:數(shù)據(jù)結(jié)構(gòu)篇 2、序列構(gòu)成...

    U2FsdGVkX1x 評論0 收藏0
  • 聯(lián)網(wǎng)高并發(fā)編程C10K問題原理和解決方案

    摘要:問題任一文件句柄的不成功會阻塞住整個應(yīng)用。主要解決的前兩個問題通過一個數(shù)組向內(nèi)核傳遞需要關(guān)注的事件消除文件句柄上限,同時使用不同字段分別標(biāo)注關(guān)注事件和發(fā)生事件,來避免重復(fù)初始化。問題逐個排查所有文件句柄狀態(tài)效率不高。 C10K問題思維導(dǎo)圖 showImg(https://segmentfault.com/img/bVbkrKe?w=1818&h=1276); C10K問題出現(xiàn)前期 大家...

    dayday_up 評論0 收藏0
  • 聯(lián)網(wǎng)高并發(fā)編程網(wǎng)絡(luò)編程中的線程模型

    摘要:如需了解更多物聯(lián)網(wǎng)網(wǎng)絡(luò)編程知識請點擊物聯(lián)網(wǎng)云端開發(fā)武器庫物聯(lián)網(wǎng)高并發(fā)編程之網(wǎng)絡(luò)編程中的線程模型值得說明的是,具體選擇線程還是進(jìn)程,更多是與平臺及編程語言相關(guān)。 如需了解更多物聯(lián)網(wǎng)網(wǎng)絡(luò)編程知識請點擊:物聯(lián)網(wǎng)云端開發(fā)武器庫 物聯(lián)網(wǎng)高并發(fā)編程之網(wǎng)絡(luò)編程中的線程模型 值得說明的是,具體選擇線程還是進(jìn)程,更多是與平臺及編程語言相關(guān)。例如 C 語言使用線程和進(jìn)程都可以(例如 Nginx 使用進(jìn)程...

    ziwenxie 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<