0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Python多進(jìn)程的理由

汽車玩家 ? 來(lái)源:編程派 ? 作者:饒木陽(yáng) ? 2020-04-04 16:50 ? 次閱讀

Python 是運(yùn)行在解釋器中的語(yǔ)言,查找資料知道, python 中有一個(gè)全局鎖( GI),在使用多進(jìn)程( Threa)的情況下,不能發(fā)揮多核的優(yōu)勢(shì)。而使用多進(jìn)程( Multiprocess),則可以發(fā)揮多核的優(yōu)勢(shì)真正地提高效率。

對(duì)比實(shí)驗(yàn)

資料顯示,如果多線程的進(jìn)程是 CPU 密集型的,那多線程并不能有多少效率上的提升,相反還可能會(huì)因?yàn)榫€程的頻繁切換,導(dǎo)致效率下降,推薦使用多進(jìn)程;如果是 IO 密集型,多線程進(jìn)程可以利用 IO 阻塞等待時(shí)的空閑時(shí)間執(zhí)行其他線程,提升效率。所以我們根據(jù)實(shí)驗(yàn)對(duì)比不同場(chǎng)景的效率

使用Python多進(jìn)程的理由

(1)引入所需要的模塊

使用Python多進(jìn)程的理由

(2)定義 CPU 密集的計(jì)算函數(shù)

使用Python多進(jìn)程的理由

(3)定義 IO 密集的文件讀寫(xiě)函數(shù)

使用Python多進(jìn)程的理由

(4) 定義網(wǎng)絡(luò)請(qǐng)求函數(shù)

使用Python多進(jìn)程的理由

(5)測(cè)試線性執(zhí)行 IO 密集操作、 CPU 密集操作所需時(shí)間、網(wǎng)絡(luò)請(qǐng)求密集型操作所需時(shí)間

使用Python多進(jìn)程的理由

輸出

CPU 密集:95.6059999466、91.57099986076355 92.52800011634827、 99.96799993515015

IO 密集:24.25、21.76699995994568、21.769999980926514、22.060999870300293

網(wǎng)絡(luò)請(qǐng)求密集型:4.519999980926514、8.563999891281128、4.371000051498413、4.522000074386597、14.671000003814697

(6)測(cè)試多線程并發(fā)執(zhí)行 CPU 密集操作所需時(shí)間

使用Python多進(jìn)程的理由

(7)測(cè)試多線程并發(fā)執(zhí)行 IO 密集操作所需時(shí)間

使用Python多進(jìn)程的理由

(8)測(cè)試多線程并發(fā)執(zhí)行網(wǎng)絡(luò)密集操作所需時(shí)間

使用Python多進(jìn)程的理由

Output : 0.7419998645782471、0.3839998245239258、0.3900001049041748

(9)測(cè)試多進(jìn)程并發(fā)執(zhí)行 CPU 密集操作所需時(shí)間

使用Python多進(jìn)程的理由

Output : 54.342000007629395、53.437999963760376

(10)測(cè)試多進(jìn)程并發(fā)執(zhí)行 IO 密集型操作

使用Python多進(jìn)程的理由

Output : 12.509000062942505、13.059000015258789

(11)測(cè)試多進(jìn)程并發(fā)執(zhí)行 Http 請(qǐng)求密集型操作

使用Python多進(jìn)程的理由

Output : 0.5329999923706055、0.4760000705718994

實(shí)驗(yàn)結(jié)果

CPU 密集型操作 IO 密集型操作網(wǎng)絡(luò)請(qǐng)求密集型操作

使用Python多進(jìn)程的理由

通過(guò)上面的結(jié)果,我們可以看到:

多線程在 IO 密集型的操作下似乎也沒(méi)有很大的優(yōu)勢(shì)(也許 IO 操作的任務(wù)再繁重一些就能體現(xiàn)出優(yōu)勢(shì)),在 CPU 密集型的操作下明顯地比單線程線性執(zhí)行性能更差,但是對(duì)于網(wǎng)絡(luò)請(qǐng)求這種忙等阻塞線程的操作,多線程的優(yōu)勢(shì)便非常顯著了

多進(jìn)程無(wú)論是在 CPU 密集型還是 IO 密集型以及網(wǎng)絡(luò)請(qǐng)求密集型(經(jīng)常發(fā)生線程阻塞的操作)中,都能體現(xiàn)出性能的優(yōu)勢(shì)。不過(guò)在類似網(wǎng)絡(luò)請(qǐng)求密集型的操作上,與多線程相差無(wú)幾,但卻更占用 CPU 等資源,所以對(duì)于這種情況下,我們可以選擇多線程來(lái)執(zhí)行。

使用Python多進(jìn)程的理由

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10890

    瀏覽量

    212430
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4802

    瀏覽量

    84885
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    做的是LED多進(jìn)制幅移鍵控通信,怎么解調(diào)信號(hào)?

    我做的是LED多進(jìn)制幅移鍵控通信(MASK),LED驅(qū)動(dòng)電路驅(qū)動(dòng)LED發(fā)出8種亮度光強(qiáng),每種光強(qiáng)表示3位二進(jìn)制數(shù)。PIN接收光強(qiáng),跨阻運(yùn)放放大濾波,然后解調(diào)。請(qǐng)問(wèn)各位專家,該怎么解調(diào)信號(hào)? 謝謝! 注:黃線是LED兩端電壓,藍(lán)線是PIN輸出信號(hào)。
    發(fā)表于 12-26 06:19

    深入解析Linux程序與進(jìn)程

    什么是程序 一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定任務(wù)或解決特定問(wèn)題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語(yǔ)法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件 什么是進(jìn)程 是一個(gè)具有獨(dú)立功能的程序
    的頭像 發(fā)表于 12-18 11:01 ?119次閱讀
    深入解析Linux程序與<b class='flag-5'>進(jìn)程</b>

    手寫(xiě)圖像模板匹配算法在OpenCV中的實(shí)現(xiàn)

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個(gè)主要的原因是查找最大閾值,只能匹配一個(gè),自己比對(duì)閾值,又導(dǎo)致無(wú)法正確設(shè)定閾值范圍,所以問(wèn)題很多。于是我重新寫(xiě)了純Python版本的NCC圖像模板匹配的代碼實(shí)現(xiàn)了一個(gè)Python版本的,簡(jiǎn)單易用,支持
    的頭像 發(fā)表于 11-11 10:12 ?292次閱讀
    手寫(xiě)圖像模板匹配算法在OpenCV中的實(shí)現(xiàn)

    一文搞懂Linux進(jìn)程的睡眠和喚醒

    一、常見(jiàn)的進(jìn)程狀態(tài)與理解 在操作系統(tǒng)內(nèi)部,有專門用來(lái)管理進(jìn)程的結(jié)構(gòu)體,叫做struct task_struct,也稱作進(jìn)程控制塊(PCB),主要包含描述進(jìn)程的相關(guān)信息,如
    發(fā)表于 11-04 15:15

    Python中多線程和多進(jìn)程的區(qū)別

    Python作為一種高級(jí)編程語(yǔ)言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見(jiàn)的兩種方式之一。在本文中,我們將探討Python中多線程與多進(jìn)程的概念、區(qū)別以及如何使用線程池與
    的頭像 發(fā)表于 10-23 11:48 ?446次閱讀
    <b class='flag-5'>Python</b>中多線程和<b class='flag-5'>多進(jìn)程</b>的區(qū)別

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語(yǔ)言之一。Python的易學(xué)易用、豐富的庫(kù)和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語(yǔ)言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?2136次閱讀

    Python建模算法與應(yīng)用

    Python作為一種功能強(qiáng)大、免費(fèi)、開(kāi)源且面向?qū)ο蟮木幊陶Z(yǔ)言,在科學(xué)計(jì)算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡(jiǎn)潔的語(yǔ)法、對(duì)動(dòng)態(tài)輸入的支持以及解釋性語(yǔ)言的本質(zhì),使得Python在多個(gè)平臺(tái)
    的頭像 發(fā)表于 07-24 10:41 ?610次閱讀

    Python在AI中的應(yīng)用實(shí)例

    Python在人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級(jí)的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細(xì)探討Python在AI中的幾個(gè)關(guān)鍵應(yīng)用實(shí)例,包括機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、自然語(yǔ)言處理、
    的頭像 發(fā)表于 07-19 17:16 ?1242次閱讀

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開(kāi)蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會(huì)看到一些用 Python 實(shí)現(xiàn)文件復(fù)制的特殊方法。下面我們開(kāi)始學(xué)習(xí)這九種不同的方法來(lái)實(shí)現(xiàn) Pyt
    的頭像 發(fā)表于 07-18 14:53 ?448次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1309次閱讀

    用pycharm進(jìn)行python爬蟲(chóng)的步驟

    以下是使用PyCharm進(jìn)行Python爬蟲(chóng)的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個(gè)流行的Python集成開(kāi)發(fā)環(huán)境
    的頭像 發(fā)表于 07-11 10:11 ?910次閱讀

    鴻蒙開(kāi)發(fā):【進(jìn)程模型】

    應(yīng)用中(同一Bundle名稱)的所有UIAbility、ServiceExtensionAbility和DataShareExtensionAbility均是運(yùn)行在同一個(gè)獨(dú)立進(jìn)程(主進(jìn)程)中,如下圖中綠色部分的“Main Process”。
    的頭像 發(fā)表于 06-13 09:53 ?306次閱讀
    鴻蒙開(kāi)發(fā):【<b class='flag-5'>進(jìn)程</b>模型】

    python中5種線程鎖盤點(diǎn)

    線程安全是多線程或多進(jìn)程編程中的一個(gè)概念,在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會(huì)通過(guò)同步機(jī)制保證各個(gè)線程都可以正常且正確的執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù)污染等意外情況。
    發(fā)表于 03-07 11:08 ?1643次閱讀
    <b class='flag-5'>python</b>中5種線程鎖盤點(diǎn)

    基于Python的地圖繪制教程

    本文將介紹通過(guò)Python繪制地形圖的方法,所需第三方Python相關(guān)模塊包括 rasterio、geopandas、cartopy 等,可通過(guò) pip 等方式安裝。
    的頭像 發(fā)表于 02-26 09:53 ?1275次閱讀
    基于<b class='flag-5'>Python</b>的地圖繪制教程

    如何使用linux下gdb來(lái)調(diào)試python程序

    如何使用linux下gdb來(lái)調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來(lái)調(diào)試Python程序。GDB是一個(gè)強(qiáng)大的調(diào)試工具,可以幫助開(kāi)發(fā)者診斷和修復(fù)程序中的錯(cuò)誤。在本文
    的頭像 發(fā)表于 01-31 10:41 ?2692次閱讀