Python 多進程

1. Unix/Linux操作系統(tǒng)提供了一個fork()系統(tǒng)調(diào)用,它非常特殊。普通的函數(shù)調(diào)用,調(diào)用一次,返回一次,但是fork()調(diào)用一次,返回兩次,因為操作系統(tǒng)自動把當前進程(稱為父進程)復(fù)制了一份(稱為子進程),然后,分別在父進程和子進程內(nèi)返回。子進程永遠返回0,而父進程返回子進程的ID。這樣做的理由是,一個父進程可以fork出很多子進程,所以,父進程要記下每個子進程的ID,而子進程只需要調(diào)用getppid()就可以拿到父進程的ID。

2. ?Python是跨平臺的,multiprocessing模塊就是跨平臺版本的多進程模塊。multiprocessing模塊提供了一個Process類來代表一個進程對象。

3.?如果要啟動大量的子進程,可以用進程池Pool的方式批量創(chuàng)建子進程?

4.?Process之間肯定是需要通信的,操作系統(tǒng)提供了很多機制來實現(xiàn)進程間的通信。Python的multiprocessing模塊包裝了底層的機制,提供了Queue、Pipes等多種方式來交換數(shù)據(jù)。

5.?在Thread和Process中,應(yīng)當優(yōu)選Process,因為Process更穩(wěn)定,而且,Process可以分布到多臺機器上,而Thread最多只能分布到同一臺機器的多個CPU上。Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務(wù)進程可以作為調(diào)度者,將任務(wù)分布到其他多個進程中,依靠網(wǎng)絡(luò)通信。

managers模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細節(jié),就可以很容易地編寫分布式多進程程序。

?著作權(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)容

  • 進程進程的概念是需要理解的,進程是操作系統(tǒng)中正在運行的一個程序?qū)嵗?,操作系統(tǒng)通過進程操作原語來對其進行調(diào)度。操作系...
    zhile_doing閱讀 561評論 0 0
  • 多進程 要讓python程序?qū)崿F(xiàn)多進程,我們先了解操作系統(tǒng)的相關(guān)知識。 Unix、Linux操作系統(tǒng)提供了一個fo...
    蓓蓓的萬能男友閱讀 675評論 0 1
  • 一、進程的概念 相信很多同學(xué)都聽說過windows、linux,MacOS都是多任務(wù),多用戶的操作系統(tǒng)。那什么是多...
    轉(zhuǎn)身后的那一回眸閱讀 1,094評論 0 1
  • 現(xiàn)在, 多核CPU已經(jīng)非常普及了, 但是, 即使過去的單核CPU, 也可以執(zhí)行多任務(wù)。 CPU執(zhí)行代碼都是順序執(zhí)行...
    LittlePy閱讀 4,932評論 0 3
  • 想讓python實現(xiàn)多進程(multiprocessing),我們要先區(qū)分不同的操作系統(tǒng)的不同之處。 Linux操...
    山有木兮有木兮閱讀 8,202評論 0 4

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