python進程

 

本來的主進程是當前運行的程序  執行到os.fork()時候,又創建了一個子進程  主進程向下執行,子進程也繼續向下運行,根據返回值的不同分別執行下面的代碼  可以使用os.getpid()得到當前進程的父進程的進程號

如果父進程先執行完畢,那麼先退出,子進程可以繼續執行,即他們各自執行,代碼是同一份代碼,但數據是各自獨有的,互不影響,哪怕是全局變量,也不互相影響。

fork只能用在類Linux系統中,不能再Windows    那麼python提供了Process 

用fork創建的子進程,可以和主進程不同時執行完畢,而Process方法中,主進程需要等到子進程執行完畢再完成

p.join(timeout)   //堵塞,等待p進程結束之後,主程序纔會往下走  p.terminate()直接結束某個子進程

 

也可以自定義類繼承Process,並重寫run方法     並用自定義類創建的對象調用start方法。  然後start自動調用子類中的run方法,這裏明明沒有start 方法,因爲他在Process類中定義,這裏就用到了工廠方法模式。

 

進程池:

這裏注意需要加入join  否則主進程關閉後,進程池也會消失,那麼無法繼續執行子進程

pool.apply(worker)  這種方式以堵塞的方式執行  必須執行完一個worker添加後,執行完成纔再進行下一個worker的添加

apply一般不用  一般用apply_async()

 

進程間通信-Queue:

 創建隊列進行參數的傳遞                     

線程池進行參數傳遞的話  需要創建Manager  然後使用Manager().Queue()隊列傳遞信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章