總結(jié)python多進(jìn)程multiprocessing的相關(guān)知識
概念
創(chuàng)建多進(jìn)程基本流程
創(chuàng)建進(jìn)程對象
啟動進(jìn)程 回收進(jìn)程
代碼:
import multiprocessing as mpfrom time import sleep# 進(jìn)程執(zhí)行函數(shù)def fun(): print('開始一個進(jìn)程') sleep(3) print('進(jìn)程結(jié)束')# 創(chuàng)建進(jìn)程對象p = mp.Process(target = fun)p.start() # 啟動進(jìn)程p.join() # 回收進(jìn)程
運行結(jié)果:
開始一個進(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 mpfrom time import sleep# 進(jìn)程執(zhí)行函數(shù)def fun(): print('開始一個進(jìn)程') sleep(3) print('進(jìn)程結(jié)束')# 創(chuàng)建進(jìn)程對象p = mp.Process(target = fun) # 把fun函數(shù)作為獨立子進(jìn)程 其它函數(shù)由進(jìn)程來執(zhí)行p.start() # 啟動進(jìn)程sleep(2)print('父進(jìn)程執(zhí)行內(nèi)容')p.join() # 回收進(jìn)程print('===============')'''pid = os.forkif pid == 0 fun() os._exit(0)else: os.wait()'''
運行結(jié)果:
開始一個進(jìn)程父進(jìn)程執(zhí)行內(nèi)容進(jìn)程結(jié)束
===============
2、子進(jìn)程不能改變父進(jìn)程中變量的值代碼:
import multiprocessing as mpfrom time import sleepa = 1# 進(jìn)程執(zhí)行函數(shù)def fun(): print('開始一個進(jìn)程') sleep(3) global a print('a=', a) a = 1000 print('a=', a) print('進(jìn)程結(jié)束')# 創(chuàng)建進(jìn)程對象p = mp.Process(target = fun) # 把fun函數(shù)作為獨立子進(jìn)程 其它函數(shù)由進(jìn)程來執(zhí)行p.start() # 啟動進(jìn)程sleep(2)print('父進(jìn)程執(zhí)行內(nèi)容')p.join() # 回收進(jìn)程print('===============')print('a=', a)
運行結(jié)果:
開始一個進(jìn)程父進(jìn)程執(zhí)行內(nèi)容a= 1a= 1000進(jìn)程結(jié)束a= 1
創(chuàng)建多個進(jìn)程代碼:
'''創(chuàng)建多個進(jìn)程'''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(), '學(xué)習(xí)')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 學(xué)習(xí)
含有參數(shù)的進(jìn)程函數(shù)代碼:
from multiprocessing import Processfrom 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()
運行結(jié)果:
I’m tomI’m working…I’m tomI’m working…I’m tomI’m working…
案例練習(xí)
代碼:
from multiprocessing import Processimport osfilename = ’./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)知識的文章就介紹到這了,更多相關(guān)python multiprocessing多進(jìn)程內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
