總結python多進程multiprocessing的相關知識
概念
創建多進程基本流程
創建進程對象
啟動進程 回收進程
代碼:
import multiprocessing as mpfrom 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 mpfrom 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.forkif pid == 0 fun() os._exit(0)else: os.wait()'''
運行結果:
開始一個進程父進程執行內容進程結束
===============
2、子進程不能改變父進程中變量的值代碼:
import multiprocessing as mpfrom time import sleepa = 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= 1a= 1000進程結束a= 1
創建多個進程代碼:
'''創建多個進程'''from multiprocessing import Processimport osfrom time import sleepdef 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 Processfrom 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 tomI’m working…I’m tomI’m working…I’m tomI’m working…
案例練習
代碼:
from multiprocessing import Processimport osfilename = ’./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的相關知識的文章就介紹到這了,更多相關python multiprocessing多進程內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: