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

    文章

    10776

    瀏覽量

    210462
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84294
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    分別使用多線程多進(jìn)程協(xié)程+paramiko在華為交換機(jī)批量快速進(jìn)行配置

    python對(duì)于網(wǎng)絡(luò)設(shè)備的操作屬于I/O密集型,在腳本運(yùn)行時(shí),存在大量的等待時(shí)間。我們便可以利用這些空閑的時(shí)間,進(jìn)行其他的操作。
    的頭像 發(fā)表于 01-16 09:13 ?727次閱讀
    分別使用多線程<b class='flag-5'>多進(jìn)程</b>協(xié)程+paramiko在華為交換機(jī)批量快速進(jìn)行配置

    線程、進(jìn)程、多線程、多進(jìn)程和多任務(wù)之間有何關(guān)系?

    進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到課中程度的數(shù)據(jù)結(jié)構(gòu)的匯集。從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。
    的頭像 發(fā)表于 01-11 13:39 ?317次閱讀
    線程、<b class='flag-5'>進(jìn)程</b>、多線程、<b class='flag-5'>多進(jìn)程</b>和多任務(wù)之間有何關(guān)系?

    你還是分不清多進(jìn)程和多線程嗎?一文搞懂!

    你還是分不清多進(jìn)程和多線程嗎?一文搞懂! 多進(jìn)程和多線程是并發(fā)編程中常見(jiàn)的兩個(gè)概念,它們都可以用于提高程序的性能和效率。但是它們的實(shí)現(xiàn)方式和使用場(chǎng)景略有不同。 1. 多進(jìn)程多進(jìn)程
    的頭像 發(fā)表于 12-19 16:07 ?493次閱讀

    python環(huán)境變量的配置pip

    開(kāi)始,然后討論如何找到Python的安裝路徑以及如何配置環(huán)境變量。接下來(lái),我們將詳細(xì)講解pip的用途和安裝方法,并解決一些與pip相關(guān)的常見(jiàn)問(wèn)題。 一、環(huán)境變量的概念 環(huán)境變量是操作系統(tǒng)提供的一種機(jī)制,用于存儲(chǔ)和傳遞一些全局的配置信息。每個(gè)進(jìn)程
    的頭像 發(fā)表于 12-15 15:41 ?2230次閱讀

    python縮進(jìn)錯(cuò)誤怎么辦

    縮進(jìn)錯(cuò)誤是Python編程中常見(jiàn)的錯(cuò)誤之一,通常是由于代碼塊的縮進(jìn)不正確導(dǎo)致的。Python是一種強(qiáng)制縮進(jìn)的語(yǔ)言,代碼塊之間需要保持一致的縮進(jìn)程度。 縮進(jìn)錯(cuò)誤主要有兩種情況:縮進(jìn)過(guò)多和縮進(jìn)不足。下面
    的頭像 發(fā)表于 11-29 16:43 ?2001次閱讀

    Python2與Python3的差異

    Python2與Python3是兩個(gè)不同的版本,它們?cè)谡Z(yǔ)法、功能和性能等方面存在一些差異。下面是對(duì)Python2和Python3的詳盡、詳實(shí)、細(xì)致的比較,分為以下幾個(gè)方面: 語(yǔ)法差異:
    的頭像 發(fā)表于 11-23 16:48 ?815次閱讀

    python32位與62位區(qū)別

    Python 是一種廣泛使用的高級(jí)編程語(yǔ)言,提供了豐富的庫(kù)和功能,可以用于開(kāi)發(fā)各種應(yīng)用程序。Python 可以在不同的操作系統(tǒng)上運(yùn)行,包括 32 位和 64 位的系統(tǒng)。本文將詳細(xì)介紹 Python
    的頭像 發(fā)表于 11-23 16:44 ?1573次閱讀

    Linux系統(tǒng)上多線程和多進(jìn)程的運(yùn)行效率

    關(guān)于多進(jìn)程和多線程,教科書(shū)上最經(jīng)典的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”,這句話應(yīng)付考試基本上夠了,但如果在工作中遇到類似的選擇問(wèn)題,那就沒(méi)有這么簡(jiǎn)單了,選的不好,會(huì)讓你
    的頭像 發(fā)表于 11-10 10:54 ?1225次閱讀
    Linux系統(tǒng)上多線程和<b class='flag-5'>多進(jìn)程</b>的運(yùn)行效率

    基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 11-08 15:31 ?0次下載
    基于ARM-Linux嵌入式系統(tǒng)的<b class='flag-5'>多進(jìn)程</b>并發(fā)服務(wù)器設(shè)計(jì)

    進(jìn)程、線程、多進(jìn)程與多線程的優(yōu)缺點(diǎn)

    1、進(jìn)程 進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到課中程度的數(shù)據(jù)結(jié)構(gòu)的匯集。從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。 舉例說(shuō)明進(jìn)程: 想
    的頭像 發(fā)表于 11-08 15:18 ?1233次閱讀
    <b class='flag-5'>進(jìn)程</b>、線程、<b class='flag-5'>多進(jìn)程</b>與多線程的優(yōu)缺點(diǎn)

    shell腳本實(shí)現(xiàn)并發(fā)多進(jìn)程

    在Shell腳本中實(shí)現(xiàn)并發(fā)多進(jìn)程可以使用以下方法: 使用符號(hào)來(lái)將其放入后臺(tái)執(zhí)行,從而實(shí)現(xiàn)并發(fā)多進(jìn)程。例如: #!/bin/bash command1 command3 符號(hào),它們將在后臺(tái)并發(fā)執(zhí)行
    的頭像 發(fā)表于 11-08 10:20 ?1183次閱讀

    關(guān)于Python多進(jìn)程和多線程詳解

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進(jìn)程和多線程,教科書(shū)上最經(jīng)典的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。
    的頭像 發(fā)表于 11-06 14:46 ?755次閱讀
    關(guān)于<b class='flag-5'>Python</b><b class='flag-5'>多進(jìn)程</b>和多線程詳解

    pandarallel模塊怎么用

    眾所周知,由于GIL的存在,Python進(jìn)程中的所有操作都是在一個(gè)CPU核上進(jìn)行的,所以為了提高運(yùn)行速度,我們一般會(huì)采用多進(jìn)程的方式。而多進(jìn)程無(wú)非就是以下幾種方案: multipro
    的頭像 發(fā)表于 10-30 15:37 ?276次閱讀
    pandarallel模塊怎么用