亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python學習筆記之多進程

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

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

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

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

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

Python中的多進程

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

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

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

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()

執行結果:

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

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

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

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

總共耗費了18.00秒.

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

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()

執行結果:

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

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

mp4下載完成! 耗費了6秒

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

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

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

總共耗費了10.09秒.

運行上面的代碼可以明顯發現兩個下載任務“同時”啟動了,而且程序的執行時間將大大縮短,不再是兩個任務的時間總和。

以上就是python學習筆記之多進程的詳細內容,更多關于Python多進程的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产麻豆视频网站 | 免费爱爱视频网站 | 国产女主播一区二区在线观看 | 亚洲性大片 | 亚洲精品14p | 成人夜色视频在线观看网站 | 91免费短视频 | 成人综合国产乱在线 | 国产一区在线视频观看 | 一级黄色在线看 | 在线观看搡女人 | 成人免费观看视频久爱网 | 97青青草原国产免费观看 | 精品久久国产视频 | 国产亚洲综合一区二区在线 | 国产成人激烈叫床视频 | 激情欧美成人狠狠色金八天国 | 亚洲一区二区三 | 成人免费激情视频 | 2018高清国产一道国产 | 免费一级片网站 | 久久精品全国免费观看国产 | 免费看av在线网站网址 | 国产香蕉98碰碰久久人人 | 免费观看情趣v视频网站 | 91av视频在线免费观看 | 一级特黄牲大片免费视频 | 成人午夜私人影院入口 | 美女被拍拍拍拍拍拍拍拍 | 小黄片毛片 | 黄色毛片看看 | 亚洲xx站| 啪啪午夜视频 | 美国特级a毛片免费网站 | 亚洲夜色综合久久 | 成人免费体验区福利云点播 | 免费黄色网络 | 精品日韩欧美国产一区二区 | 日韩欧美在线一区二区三区 | 在线播放国产视频 | 国产制服丝袜在线 |