最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python學(xué)習(xí)筆記之多進(jìn)程

 更新時(shí)間:2020年08月06日 11:50:05   作者:python學(xué)習(xí)教程  
這篇文章主要介紹了python多進(jìn)程的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下

我們現(xiàn)代的操作系統(tǒng),都是支持“多任務(wù)”的操作系統(tǒng),對(duì)于操作系統(tǒng)來說,一個(gè)任務(wù)就是一個(gè)進(jìn)程(process)。比如打開一個(gè)瀏覽器就是啟動(dòng)一個(gè)瀏覽器進(jìn)程。

如果我們將計(jì)算器的核心CPU比喻為一座工廠,那么進(jìn)程就像工廠里的車間,它代表CPU所能處理的單個(gè)任務(wù)。任一時(shí)刻,CPU總是運(yùn)行一個(gè)進(jìn)程,其他進(jìn)程處于非運(yùn)行狀態(tài)。

看到這大家可能會(huì)有一些疑問了,其他進(jìn)程處于非運(yùn)行狀態(tài)?可是我用瀏覽器訪問網(wǎng)頁的時(shí)候,音樂播放器明明也在運(yùn)行啊。

實(shí)際上是操作系統(tǒng)輪流讓各個(gè)任務(wù)交替執(zhí)行,任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2,任務(wù)2執(zhí)行0.01秒,再切換到任務(wù)3,執(zhí)行0.01秒……這樣反復(fù)執(zhí)行下去。表面上看,每個(gè)任務(wù)都是交替執(zhí)行的,但是,由于CPU的執(zhí)行速度實(shí)在是太快了,我們感覺就像所有任務(wù)都在同時(shí)執(zhí)行一樣。

Python中的多進(jìn)程

在UNIX/LINUX操作系統(tǒng)中,可以使用fork()函數(shù)來創(chuàng)建。fork函數(shù)比其他普通函數(shù)有一點(diǎn)特殊之處,就是普通的函數(shù)調(diào)用,調(diào)用一次,返回一次,但是fork()調(diào)用一次,返回兩次,因?yàn)椴僮飨到y(tǒng)自動(dòng)把當(dāng)前進(jìn)程(稱為父進(jìn)程)復(fù)制了一份(稱為子進(jìn)程),然后,分別在父進(jìn)程和子進(jìn)程內(nèi)返回。

子進(jìn)程永遠(yuǎn)返回0,而父進(jìn)程返回子進(jìn)程的ID。這樣做的理由是,一個(gè)父進(jìn)程可以fork出很多子進(jìn)程,所以,父進(jìn)程要記下每個(gè)子進(jìn)程的ID,而子進(jìn)程只需要調(diào)用getppid()就可以拿到父進(jìn)程的ID。

fork()函數(shù)被封裝在os模塊中。接下來,我們舉例說明使用多進(jìn)程和不使用多進(jìn)程的區(qū)別:

from random import randint

from time import time, sleep

def download_task(filename):

print('開始下載%s...' % filename)

time_to_download = randint(5, 10)

sleep(time_to_download)

print('%s下載完成! 耗費(fèi)了%d秒' % (filename, time_to_download))

def main():

start = time()

download_task('MySQL從刪庫到跑路.pdf')

download_task('萬萬沒想到.mp4')

end = time()

print('總共耗費(fèi)了%.2f秒.' % (end - start))if __name__ == '__main__':

main()

執(zhí)行結(jié)果:

開始下載MySQL從刪庫到跑路.pdf...

MySQL從刪庫到跑路.pdf下載完成! 耗費(fèi)了9秒

開始下載萬萬沒想到.mp4...

萬萬沒想到.mp4下載完成! 耗費(fèi)了9秒

總共耗費(fèi)了18.00秒.

從上面的例子可以看出,如果程序中的代碼只能按順序一點(diǎn)點(diǎn)的往下執(zhí)行,那么即使執(zhí)行兩個(gè)毫不相關(guān)的下載任務(wù),也需要先等待一個(gè)文件下載完成后才能開始下一個(gè)下載任務(wù),很顯然這并不合理也沒有效率。接下來我們使用多進(jìn)程的方式將兩個(gè)下載任務(wù)放到不同的進(jìn)程中,代碼如下所示:

from multiprocessing import Process

from os import getpid

from random import randint

from time import time, sleep

def download_task(filename):

print('啟動(dòng)下載進(jìn)程,進(jìn)程號(hào)[%d].' % getpid()) print('開始下載%s...' % filename) time_to_download = randint(5, 10)

sleep(time_to_download)

print('%s下載完成! 耗費(fèi)了%d秒' % (filename, time_to_download))

def main():

start = time()

p1 = Process(target=download_task, args=('MySQL從刪庫到跑路.pdf', ))

p1.start()

p2 = Process(target=download_task, args=('萬萬沒想到.mp4', ))

p2.start()

p1.join()

p2.join()

end = time()

print('總共耗費(fèi)了%.2f秒.' % (end - start))

if __name__ == '__main__': main()

執(zhí)行結(jié)果:

啟動(dòng)下載進(jìn)程,進(jìn)程號(hào)[568408].

開始下載萬萬沒想到.mp4...萬萬沒想到.

mp4下載完成! 耗費(fèi)了6秒

啟動(dòng)下載進(jìn)程,進(jìn)程號(hào)[565896].

開始下載MySQL從刪庫到跑路.

pdf...MySQL從刪庫到跑路.pdf下載完成! 耗費(fèi)了10秒

總共耗費(fèi)了10.09秒.

運(yùn)行上面的代碼可以明顯發(fā)現(xiàn)兩個(gè)下載任務(wù)“同時(shí)”啟動(dòng)了,而且程序的執(zhí)行時(shí)間將大大縮短,不再是兩個(gè)任務(wù)的時(shí)間總和。

以上就是python學(xué)習(xí)筆記之多進(jìn)程的詳細(xì)內(nèi)容,更多關(guān)于Python多進(jìn)程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Python組裝jmx并調(diào)用JMeter實(shí)現(xiàn)壓力測試

    基于Python組裝jmx并調(diào)用JMeter實(shí)現(xiàn)壓力測試

    這篇文章主要介紹了基于Python組裝jmx并調(diào)用JMeter實(shí)現(xiàn)壓力測試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python range實(shí)例用法分享

    python range實(shí)例用法分享

    在本篇文章里小編給大家整理了關(guān)于python range實(shí)例用法,有需要的朋友們可以學(xué)習(xí)參考下
    2020-02-02
  • ?Java?SE?面向?qū)ο缶幊痰?個(gè)常用接口

    ?Java?SE?面向?qū)ο缶幊痰?個(gè)常用接口

    這篇文章主要f?Java?SE?面向?qū)ο缶幊痰?個(gè)常用接口,Comparable、Comparator?比較器、Cloneable,下面文章詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-01-01
  • Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法

    Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法

    這篇文章主要介紹了Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Pytorch基礎(chǔ)教程之torchserve模型部署解析

    Pytorch基礎(chǔ)教程之torchserve模型部署解析

    torchserve是基于netty網(wǎng)絡(luò)框架實(shí)現(xiàn)的,底層使用EpollServerSocketChannel服務(wù)進(jìn)行網(wǎng)絡(luò)通信,通過epoll多路復(fù)用技術(shù)實(shí)現(xiàn)高并發(fā)網(wǎng)絡(luò)連接處理,這篇文章主要介紹了Pytorch基礎(chǔ)教程之torchserve模型部署和推理,需要的朋友可以參考下
    2023-07-07
  • Python守護(hù)進(jìn)程和腳本單例運(yùn)行詳解

    Python守護(hù)進(jìn)程和腳本單例運(yùn)行詳解

    本篇文章主要介紹了Python守護(hù)進(jìn)程和腳本單例運(yùn)行,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 使用Python實(shí)現(xiàn)MongoDB數(shù)據(jù)轉(zhuǎn)表格文件CSV

    使用Python實(shí)現(xiàn)MongoDB數(shù)據(jù)轉(zhuǎn)表格文件CSV

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)將MongoDB中的數(shù)據(jù)轉(zhuǎn)換為表格文件(如CSV)以便于數(shù)據(jù)交換、共享或?qū)氲狡渌到y(tǒng)進(jìn)行分析,需要的可以參考下
    2024-04-04
  • python中matplotlib實(shí)現(xiàn)最小二乘法擬合的過程詳解

    python中matplotlib實(shí)現(xiàn)最小二乘法擬合的過程詳解

    這篇文章主要給大家介紹了關(guān)于python中matplotlib實(shí)現(xiàn)最小二乘法擬合的相關(guān)資料,文中通過示例代碼詳細(xì)介紹了關(guān)于最小二乘法擬合直線和最小二乘法擬合曲線的實(shí)現(xiàn)過程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • 對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解

    對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 在tensorflow下利用plt畫論文中l(wèi)oss,acc等曲線圖實(shí)例

    在tensorflow下利用plt畫論文中l(wèi)oss,acc等曲線圖實(shí)例

    這篇文章主要介紹了在tensorflow下利用plt畫論文中l(wèi)oss,acc等曲線圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評(píng)論

东海县| 江孜县| 昔阳县| 富裕县| 临邑县| 荆州市| 广宗县| 舒城县| 镶黄旗| 四会市| 壤塘县| 孟津县| 思茅市| 定结县| 阳信县| 铁岭市| 徐水县| 宕昌县| 富宁县| 竹山县| 右玉县| 文安县| 军事| 玉田县| 瓦房店市| 华亭县| 屏东县| 湖州市| 黔东| 宜君县| 永顺县| 镇江市| 南川市| 临海市| 云林县| 涪陵区| 新绛县| 满城县| 德惠市| 延庆县| 神池县|