python之進程(multiprocess)


 

有人說測試學習多進程(或多線程)有啥用?額告訴你很有用,特別是在自己寫性能測試工具時就可以用到,而且非常方便

 

這里只介紹非常簡單的多進程模塊(multiprocessing.Process)

代碼如下:

#導入模塊
from multiprocessing import Process import time,os,random
#創建一個測試函數subFunc def subFunc(param,ppid): sleepTime = random.randint(1,10) print('Begin %s subProcess,and will wait %s,subPID is %s,mainPID is %s'%(param,sleepTime,os.getpid(),ppid)) time.sleep(sleepTime) print('End %s subProcess...'%param)
#主程序 if __name__ == '__main__': param = 5 subProcessList = [] print('Begin mainProcess...') for i in range(param): p = Process(target=subFunc,args=(i+1,os.getpid(),)) p.start() subProcessList.append(p) for p in subProcessList: p.join() print('End mainProcess...')

 

看着代碼是不是很簡單?答案是肯定的,用得多了自然也就簡單了,當然這是最簡單的調用

 通過Process()來創建進程,然后使用start啟動進程,最后使用join在所有子進程結束后再執行后面的命令,執行結果如下:

 

 

對於需要創建大量子進程的程序來說,不能這么寫,因為我們可以使用進程池模塊(Pool)來實現

具體代碼如下:

#導入模塊
from multiprocessing import Pool
import time,os,random

#創建一個測試函數subFunc
def subFunc(param,ppid):
    sleepTime = random.randint(1,10)
    print('Begin %s subProcess,and will wait %s,subPID is %s,mainPID is %s'%(param,sleepTime,os.getpid(),ppid))
    time.sleep(sleepTime)
    print('End %s subProcess...'%param)

if __name__ == '__main__':
    param = 5
    print('Begin mainProcess...')
    #創建進程池
    p = Pool(5)
    for i in range(param):
        p.apply_async(subFunc,args=(i+1,os.getpid(),))
    #關閉進程
    p.close()
    #等待子進程結束后在執行后續命令
    p.join()

    print('End mainProcess...')

 

也是很簡單的,每步的動作注釋代碼里都有,就不一一解釋了,執行結果如下(和上面的Process類似):

 

還是那句話,測試人員要向多維度多方向發展,特別是向開發靠攏,把學到的開發知識應用於測試當中,最終成為一個測試開發的復合型人才,這才是未來測試的出路,只做單一的測試只會被淘汰

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM