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