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)程” 的方法,包括了:
python中創(chuàng)建子進(jìn)程的方法:
在新的 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ā)情形,只能選擇線程/多線程。