python2 中的進(jìn)程入門講解

Python 中的進(jìn)程實(shí)現(xiàn),通過 subprocess/multiprocessing 模塊編寫。

Python 中的進(jìn)程

在 Python 中,通過 Python 解釋器執(zhí)行的任何代碼,首先本身都是一個(gè)進(jìn)程,比如:

~# python test.py

Python 解釋器會(huì)自動(dòng)啟動(dòng)一個(gè)進(jìn)程,并加載 test.py 中的代碼執(zhí)行。

我們這里研究的進(jìn)程是:如何在這樣的過程中,創(chuàng)建另一個(gè)附加進(jìn)程,或者說如何創(chuàng)建“子進(jìn)程”。也就是想辦法“手動(dòng)”創(chuàng)建一個(gè)進(jìn)程,而不是自動(dòng)生成。

只有能創(chuàng)建“子進(jìn)程”了,我們才能手動(dòng)編些進(jìn)程來執(zhí)行額外的代碼,而不是Python 自動(dòng)創(chuàng)建,自動(dòng)執(zhí)行,有助于我們合理和靈活的利用多 CPU 的情形。

子進(jìn)程的啟動(dòng)方法

在 Python 代碼中,啟動(dòng)“子進(jìn)程” 的方法,包括了:

os.system

os.spawnv

os.popen

popen2.popen

commands

python中創(chuàng)建子進(jìn)程的方法:

os.spawnv

os.popen

在新的 Python 版本中,比如 Python 2.4 以及以上,都可以使用 subprocess 來代替如上舊的使用方法。

總結(jié):

Python 中使用進(jìn)程,從應(yīng)用層面講,簡單可以理解為:

執(zhí)行額外的命令/可執(zhí)行文件

在主進(jìn)程中,以子進(jìn)程 的方式啟動(dòng) Python 代碼

第一種情況,我們?cè)?Python 2.4 之后的版本,通過 subprocess 來完成,并且盡量避免使用舊有的內(nèi)置函數(shù)。

第二種情況,大多使用 multiprocessing 來完成,這對(duì)于規(guī)避 GIL 的問題,利用多 CPU 有好處,當(dāng)然如果是個(gè)簡單程序,或者并不是一個(gè)計(jì)算密集型,而是 IO 密集型的并發(fā)情形,只能選擇線程/多線程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容