色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

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

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

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

看到這大家可能會(huì)有一些疑問(wèn)了,其他進(jìn)程處于非運(yùn)行狀態(tài)?可是我用瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè)的時(shí)候,音樂(lè)播放器明明也在運(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í)在是太快了,我們感覺(jué)就像所有任務(wù)都在同時(shí)執(zhí)行一樣。

Python中的多進(jìn)程

在UNIX/LINUX操作系統(tǒng)中,可以使用fork()函數(shù)來(lái)創(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)程(稱(chēng)為父進(jìn)程)復(fù)制了一份(稱(chēng)為子進(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模塊中。接下來(lái),我們舉例說(shuō)明使用多進(jìn)程和不使用多進(jìn)程的區(qū)別:

from random import randintfrom time import time, sleepdef download_task(filename):print(’開(kāi)始下載%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從刪庫(kù)到跑路.pdf’)download_task(’萬(wàn)萬(wàn)沒(méi)想到.mp4’)end = time()print(’總共耗費(fèi)了%.2f秒.’ % (end - start))if __name__ == ’__main__’:main()

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

開(kāi)始下載MySQL從刪庫(kù)到跑路.pdf...

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

開(kāi)始下載萬(wàn)萬(wàn)沒(méi)想到.mp4...

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

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

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

from multiprocessing import Processfrom os import getpidfrom random import randintfrom time import time, sleepdef download_task(filename):print(’啟動(dòng)下載進(jìn)程,進(jìn)程號(hào)[%d].’ % getpid()) print(’開(kāi)始下載%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從刪庫(kù)到跑路.pdf’, ))p1.start()p2 = Process(target=download_task, args=(’萬(wàn)萬(wàn)沒(méi)想到.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].

開(kāi)始下載萬(wàn)萬(wàn)沒(méi)想到.mp4...萬(wàn)萬(wàn)沒(méi)想到.

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

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

開(kāi)始下載MySQL從刪庫(kù)到跑路.

pdf...MySQL從刪庫(kù)到跑路.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)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久久香蕉精品视频 | 美女视频在线观看黄 | 久久精品视频网站 | 色香欲综合成人免费视频 | gogo999亚洲肉体艺术大胆 | 日本免费人做人一区在线观看 | 国产亚洲欧美久久精品 | 99热精品在线免费观看 | 免费成人高清 | 91精品免费国产高清在线 | 中文字幕亚洲一区 | 亚洲精品国产成人专区 | www操操操 | 97国产精品欧美一区二区三区 | 夜精品a一区二区三区 | 波多野结衣视频在线 | 国产精品美女久久久久网站 | 国产成年网站v片在线观看 国产成人aa在线视频 | 九九九精品 | 91成年人免费视频 | 国产亚洲精品福利片 | 亚洲国产精品一区二区九九 | 国产原创系列在线 | 欧美专区在线视频 | 99精品国产成人一区二区在线 | 午夜嘿咻 | 日本成本人片 | 99re6热视频精品免费观看 | 三级黄色片网址 | 青青自拍| 寡妇野外啪啪一区二区 | 亚洲成人tv| 国产一二三区在线观看 | 日本韩经典三级在线播放 | 亚洲视频一 | 久久er国产精品免费观看1 | 国产码一区二区三区 | 国产区在线免费观看 | 失禁h啪肉尿出来高h健身房 | 另类女最新视频 | 日本三级香港三级乳网址 |