成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

asoren / 1188人閱讀

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

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

本文重點(diǎn):

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

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

二、期物

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

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

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

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

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

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

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

實(shí)例: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)庫(kù)中所有阻塞型I/O函數(shù)都會(huì)釋放全局解釋器鎖(GIL),允許其他線程運(yùn)行。
因此盡管有GIL,Python線程仍然適合在I/O密集型系統(tǒng)使用。

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

對(duì)CPU密集型工作來(lái)說(shuō),要啟動(dòng)多個(gè)進(jìn)程,規(guī)避GIL。

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44673.html

相關(guān)文章

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

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

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

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

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

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

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

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

    ziwenxie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<