您好,登錄后才能下訂單哦!
這篇文章主要介紹“python多進程multiprocessing的原理和應用”,在日常操作中,相信很多人在python多進程multiprocessing的原理和應用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python多進程multiprocessing的原理和應用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
概念
創建多進程基本流程
創建進程對象
啟動進程 回收進程
代碼:
import multiprocessing as mp from time import sleep # 進程執行函數 def fun(): print("開始一個進程") sleep(3) print("進程結束") # 創建進程對象 p = mp.Process(target = fun) p.start() # 啟動進程 p.join() # 回收進程
運行結果:
開始一個進程
進程結束
Process finished with exit code 0
1 、父子進程是并行執行的 子進程執行函數 父進程執行除子進程外內容:
import multiprocessing as mp from time import sleep # 進程執行函數 def fun(): print("開始一個進程") sleep(3) print("進程結束") # 創建進程對象 p = mp.Process(target = fun) # 把fun函數作為獨立子進程 其它函數由進程來執行 p.start() # 啟動進程 sleep(2) print("父進程執行內容") p.join() # 回收進程 print("===============") """ pid = os.fork if pid == 0 fun() os._exit(0) else: os.wait() """
運行結果:
開始一個進程
父進程執行內容
進程結束
===============
2、子進程不能改變父進程中變量的值
代碼:
import multiprocessing as mp from time import sleep a = 1 # 進程執行函數 def fun(): print("開始一個進程") sleep(3) global a print("a=", a) a = 1000 print("a=", a) print("進程結束") # 創建進程對象 p = mp.Process(target = fun) # 把fun函數作為獨立子進程 其它函數由進程來執行 p.start() # 啟動進程 sleep(2) print("父進程執行內容") p.join() # 回收進程 print("===============") print("a=", a)
運行結果:
開始一個進程
父進程執行內容
a= 1
a= 1000
進程結束
a= 1
創建多個進程
代碼:
""" 創建多個進程 """ 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()
運行結果:
46013 – 46022 吃飯
46013 – 46023 睡覺
46013 – 46024 學習
含有參數的進程函數
代碼:
from multiprocessing import Process from time import sleep # 含有參數的進程函數 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()
運行結果:
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()
到此,關于“python多進程multiprocessing的原理和應用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。