總結(jié)python多進(jìn)程multiprocessing的相關(guān)知識(shí)
multiprocessing多進(jìn)程
概念
創(chuàng)建多進(jìn)程基本流程
創(chuàng)建進(jìn)程對(duì)象
啟動(dòng)進(jìn)程 回收進(jìn)程
代碼:
import multiprocessing as mp from time import sleep # 進(jìn)程執(zhí)行函數(shù) def fun(): print("開(kāi)始一個(gè)進(jìn)程") sleep(3) print("進(jìn)程結(jié)束") # 創(chuàng)建進(jìn)程對(duì)象 p = mp.Process(target = fun) p.start() # 啟動(dòng)進(jìn)程 p.join() # 回收進(jìn)程
運(yùn)行結(jié)果:
開(kāi)始一個(gè)進(jìn)程
進(jìn)程結(jié)束
Process finished with exit code 0
1 、父子進(jìn)程是并行執(zhí)行的 子進(jìn)程執(zhí)行函數(shù) 父進(jìn)程執(zhí)行除子進(jìn)程外內(nèi)容:
import multiprocessing as mp from time import sleep # 進(jìn)程執(zhí)行函數(shù) def fun(): print("開(kāi)始一個(gè)進(jìn)程") sleep(3) print("進(jìn)程結(jié)束") # 創(chuàng)建進(jìn)程對(duì)象 p = mp.Process(target = fun) # 把fun函數(shù)作為獨(dú)立子進(jìn)程 其它函數(shù)由進(jìn)程來(lái)執(zhí)行 p.start() # 啟動(dòng)進(jìn)程 sleep(2) print("父進(jìn)程執(zhí)行內(nèi)容") p.join() # 回收進(jìn)程 print("===============") """ pid = os.fork if pid == 0 fun() os._exit(0) else: os.wait() """
運(yùn)行結(jié)果:
開(kāi)始一個(gè)進(jìn)程
父進(jìn)程執(zhí)行內(nèi)容
進(jìn)程結(jié)束
===============
2、子進(jìn)程不能改變父進(jìn)程中變量的值
代碼:
import multiprocessing as mp from time import sleep a = 1 # 進(jìn)程執(zhí)行函數(shù) def fun(): print("開(kāi)始一個(gè)進(jìn)程") sleep(3) global a print("a=", a) a = 1000 print("a=", a) print("進(jìn)程結(jié)束") # 創(chuàng)建進(jìn)程對(duì)象 p = mp.Process(target = fun) # 把fun函數(shù)作為獨(dú)立子進(jìn)程 其它函數(shù)由進(jìn)程來(lái)執(zhí)行 p.start() # 啟動(dòng)進(jìn)程 sleep(2) print("父進(jìn)程執(zhí)行內(nèi)容") p.join() # 回收進(jìn)程 print("===============") print("a=", a)
運(yùn)行結(jié)果:
開(kāi)始一個(gè)進(jìn)程
父進(jìn)程執(zhí)行內(nèi)容
a= 1
a= 1000
進(jìn)程結(jié)束
a= 1
創(chuàng)建多個(gè)進(jìn)程
代碼:
""" 創(chuàng)建多個(gè)進(jìn)程 """ from multiprocessing import Process import os from time import sleep def fun1(): sleep(2) print(os.getppid(), '--', os.getpid(), "吃飯") def fun2(): sleep(3) print(os.getppid(), '--', os.getpid(), "睡覺(jué)") def fun3(): sleep(4) print(os.getppid(), '--', os.getpid(), "學(xué)習(xí)") jobs =[] for th in [fun1, fun2, fun3]: p = Process(target = th) jobs.append(p) p.start() for i in jobs: i.join()
運(yùn)行結(jié)果:
46013 – 46022 吃飯
46013 – 46023 睡覺(jué)
46013 – 46024 學(xué)習(xí)
含有參數(shù)的進(jìn)程函數(shù)
代碼:
from multiprocessing import Process from time import sleep # 含有參數(shù)的進(jìn)程函數(shù) def worker(sec, name): for i in range(3): sleep(sec) print("I'm %s"%name) print("I'm working...") # p = Process(target = worker, args = (2, "Tom")) p = Process(target = worker, kwargs = {'name':'tom', 'sec': 2}) p.start() p.join()
運(yùn)行結(jié)果:
I'm tom
I'm working…
I'm tom
I'm working…
I'm tom
I'm working…
案例練習(xí)
代碼:
from multiprocessing import Process import os filename = './dace.jpg' size = os.path.getsize(filename) # 復(fù)制上半部分 def up(): fr = open(filename, 'rb') fw = open('bot,jpg', 'wb') n = size//2 fw.write(fr.read(n)) fw.close() fr.close() # 復(fù)制下半部分 def down(): fr = open(filename, 'rb') fw = open('bot,jpg', 'wb') fr.seek(size//2.0) fw.write(fr.read()) fw.close() fr.close() p = Process(target = up) q = Process(target = down) p.start() q.start() p.join() q.join()
到此這篇關(guān)于總結(jié)python多進(jìn)程multiprocessing的相關(guān)知識(shí)的文章就介紹到這了,更多相關(guān)python multiprocessing多進(jìn)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jupyter notebook保存文件默認(rèn)路徑更改方法匯總(親測(cè)可以)
安裝Anaconda后,新建文件的默認(rèn)存儲(chǔ)路徑一般在C系統(tǒng)盤(pán),那么路徑是什么呢?如何更改jupyter notebook保存文件默認(rèn)路徑呢?今天小編就這一問(wèn)題通過(guò)兩種方法給大家講解,需要的朋友跟隨小編一起看看吧2021-06-06python實(shí)現(xiàn)獲取客戶(hù)機(jī)上指定文件并傳輸?shù)椒?wù)器的方法
這篇文章主要介紹了python實(shí)現(xiàn)獲取客戶(hù)機(jī)上指定文件并傳輸?shù)椒?wù)器的方法,涉及Python實(shí)現(xiàn)C/S架構(gòu)程序與socket程序的使用技巧,需要的朋友可以參考下2015-03-03python之virtualenv的簡(jiǎn)單使用方法(必看篇)
下面小編就為大家分享一python之virtualenv的簡(jiǎn)單使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11TensorFlow高效讀取數(shù)據(jù)的方法示例
這篇文章主要介紹了TensorFlow高效讀取數(shù)據(jù)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)
超市管理系統(tǒng)有管理員和普通用戶(hù)兩條分支,只需掌握Python基礎(chǔ)語(yǔ)法,就可以完成這個(gè)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下2022-12-12基于Python Shell獲取hostname和fqdn釋疑
一直以來(lái)被linux的hostname和fqdn(Fully Qualified Domain Name)困惑著,今天通過(guò)腳本之家平臺(tái)把它們使用細(xì)節(jié)弄清分享給大家2016-01-01Python自動(dòng)化辦公之Word文件內(nèi)容的讀取
word、excel、PPT,雖然說(shuō)是特殊文件,其實(shí)也是實(shí)際工作中我們經(jīng)常會(huì)用到的文件類(lèi)型。本文將為大家詳解Python讀取Word文件和文件內(nèi)容的方法,感興趣的可以了解一下2022-05-05python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式
今天小編就為大家分享一篇python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python實(shí)現(xiàn)zabbix發(fā)送短信腳本
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)zabbix發(fā)送短信腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09