欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

Python中的多進程

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

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

fork()函數(shù)被封裝在os模塊中。接下來,我們舉例說明使用多進程和不使用多進程的區(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下載完成! 耗費了%d秒' % (filename, time_to_download))

def main():

start = time()

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

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

end = time()

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

main()

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

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

MySQL從刪庫到跑路.pdf下載完成! 耗費了9秒

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

萬萬沒想到.mp4下載完成! 耗費了9秒

總共耗費了18.00秒.

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

from multiprocessing import Process

from os import getpid

from random import randint

from time import time, sleep

def download_task(filename):

print('啟動下載進程,進程號[%d].' % getpid()) print('開始下載%s...' % filename) time_to_download = randint(5, 10)

sleep(time_to_download)

print('%s下載完成! 耗費了%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('總共耗費了%.2f秒.' % (end - start))

if __name__ == '__main__': main()

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

啟動下載進程,進程號[568408].

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

mp4下載完成! 耗費了6秒

啟動下載進程,進程號[565896].

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

pdf...MySQL從刪庫到跑路.pdf下載完成! 耗費了10秒

總共耗費了10.09秒.

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

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

相關(guān)文章

  • python bottle框架支持jquery ajax的RESTful風(fēng)格的PUT和DELETE方法

    python bottle框架支持jquery ajax的RESTful風(fēng)格的PUT和DELETE方法

    下面小編就為大家?guī)硪黄猵ython bottle框架支持jquery ajax的RESTful風(fēng)格的PUT和DELETE方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Python線性擬合實現(xiàn)函數(shù)與用法示例

    Python線性擬合實現(xiàn)函數(shù)與用法示例

    這篇文章主要介紹了Python線性擬合實現(xiàn)函數(shù)與用法,結(jié)合實例形式分析了Python使用線性擬合算法與不使用線性擬合算法的相關(guān)算法操作技巧,需要的朋友可以參考下
    2018-12-12
  • 使用grappelli為django admin后臺添加模板

    使用grappelli為django admin后臺添加模板

    本文介紹了一款非常流行的Django模板系統(tǒng)--grappelli,以及如何給Django的admin后臺添加模板,非常的實用,這里推薦給大家。
    2014-11-11
  • python 第三方庫的安裝及pip的使用詳解

    python 第三方庫的安裝及pip的使用詳解

    下面小編就為大家?guī)硪黄猵ython 第三方庫的安裝及pip的使用詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • python 用pandas實現(xiàn)數(shù)據(jù)透視表功能

    python 用pandas實現(xiàn)數(shù)據(jù)透視表功能

    這篇文章主要介紹了python 用pandas實現(xiàn)數(shù)據(jù)透視表功能的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python命令行中引導(dǎo)用戶指定選擇路徑

    Python命令行中引導(dǎo)用戶指定選擇路徑

    這篇文章主要為大家介紹了命令行中引導(dǎo)用戶指定選擇路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 詳細解讀Python中的json操作

    詳細解讀Python中的json操作

    json操作是最為基本的、最為常用的,Python自帶的json模塊就可以滿足大部分應(yīng)用場景,而且使用起來極為簡單,下面這篇文章主要給大家介紹了關(guān)于Python中json操作的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中的實現(xiàn)方法

    Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中的實現(xiàn)方法

    這篇文章主要介紹了Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中,通過這個腳本,我們就可以把專業(yè)dephi程序分析的結(jié)果,轉(zhuǎn)移到IDA專業(yè)逆向代碼分析的平臺,實現(xiàn)聯(lián)動,需要的朋友可以參考下
    2022-08-08
  • python?字符串索引取值的實現(xiàn)示例

    python?字符串索引取值的實現(xiàn)示例

    本文主要介紹了python?字符串索引取值的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python數(shù)據(jù)類型之List列表實例詳解

    Python數(shù)據(jù)類型之List列表實例詳解

    這篇文章主要介紹了Python數(shù)據(jù)類型之List列表,結(jié)合實例形式分析了PythonList列表的概念、功能、定義以及判斷、截取、遍歷、切片等常見操作技巧,需要的朋友可以參考下
    2019-05-05

最新評論