Process與進程池Pool

fork()生成進程只適用于liunx系統(tǒng),要想跨平臺使用多進程需要導(dǎo)入multiprocessing模塊。
和fork產(chǎn)生的進程不同,利用Process產(chǎn)生的進程,主進程會等待子進程執(zhí)行完畢。
也可利用子類來創(chuàng)建進程,自定義類繼承Process,重寫run()方法,當(dāng)進程start()時會自動調(diào)用run方法。
每個進程都有獨立的系統(tǒng)資源,各進程間的變量不共享互不影響。
join()方法可以等待子進程結(jié)束后才繼續(xù)往下走,用于進程間的同步。
1 from multiprocessing import Process 2 import time 3 def test(): 4 while True: 5 print('test') 6 time.sleep(1) 7 8 p = Process(target=test) 9 p.start() 10 11 while True: 12 print('main') 13 time.sleep(1)

Process的參數(shù)有:

  • target
    所調(diào)用的對象
  • args
    調(diào)用函數(shù)對象的元組參數(shù)
  • kwargs
    調(diào)用函數(shù)對象的關(guān)鍵字參數(shù)字典
  • name
    進程實例的別名

Process常用屬性,方法

  • is_alive()
    進程是否還在執(zhí)行
  • join([timeout])
    等待進程結(jié)束,或等待多少秒
  • start()
  • run()
    沒有給定target,執(zhí)行對象中的run()方法
  • terminate()
    立即終止
  • name
  • pid

進程池Pool

用于創(chuàng)建多個進程
3 from multiprocessing import Pool 4 import time 5 import os 6 7 def worker(num): 8 time.sleep(1) 9 print('工人 = %d,任務(wù) = %d '%(os.getpid(),num)) 10 11 pa = Pool(3) 12 for i in range(10): 13 print(i) 14 pa.apply_async(worker,(i,)) 15 print('start') 16 pa.close() 17 pa.join() 18 print('end ')

multiprocess.Pool常用函數(shù)

  • apply_async(func,args,kwds)
    使用阻塞方式調(diào)用func
  • close()
    關(guān)閉Pool,不能繼續(xù)添加新任務(wù)
  • terminate()
  • join(): 主進程阻塞,等待子進程結(jié)束,必須在close或terminate之后使用

主進程不等待子進程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容