国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:78日期:2022-07-14 17:57:11

我們現(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 randintfrom time import time, sleepdef 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 Processfrom os import getpidfrom random import randintfrom time import time, sleepdef 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)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本免费一区二区三区视频 | 精品视频一区二区三区四区 | 欧美日本在线一区二区三区 | 综合精品 | 2022国产精品网站在线播放 | 亚洲免费片 | 在线亚洲精品中文字幕美乳 | 免费精品久久久久久中文字幕 | 91在线一区二区三区 | 亚洲一区二区精品视频 | 亚州免费 | 美女被男人桶到嗷嗷叫爽网站 | 成人性生免费视频 | 国产在线观看成人 | 免费a级毛片大学生免费观看 | 亲子乱子伦xxxxxinin | 91成人在线视频 | 精品三级国产一区二区三区四区 | 玖玖99视频 | 午夜国产 | 九色福利 | 天天五月天丁香婷婷深爱综合 | 成人a一级毛片免费看 | 亚洲免费专区 | 国产精品日产三级在线观看 | 亚洲一区二区三区一品精 | 在线视频 国产交换 | 欧美日韩永久久一区二区三区 | 久久香蕉国产线看观看精品yw | 成年人在线网站 | 久青草视频在线 | 国产亚洲精品国看不卡 | 网站国产 | 毛片一级做a爰片性色 | 欧美韩国日本在线 | 欧美hdvideosex4k| 国产黄色在线播放 | hd欧美xxx欧美极品hd | 毛片网站在线 | 国产精品免费久久久免费 | 国产精品免费视频一区二区三区 |