比較multiprocessing和subprocess模塊

關(guān)于python的進程,常用的庫有兩個:multiprocessing和subprocess模塊。
具體使用時,想要實現(xiàn)并發(fā)調(diào)用外部指令背镇,應該用哪個模塊呢?
研究下兩個模塊區(qū)別:

multiprocessing的核心機制是fork泽裳,重開一個進程瞒斩,首先會把父進程的代碼copy重載一遍,但是在windows平臺上是不支持fork的涮总,那windows上如何使用呢胸囱?
--答案是,if main入口中瀑梗,就可以照常使用multiprocessing(忘記為啥了/試出來的)烹笔;

subprocess適用于與外部進程交互,調(diào)用外部進程抛丽;

那么谤职,如下場景:pc連接手機,想要持續(xù)捕捉手機adb日志铺纽,然后啟動一個app進程柬帕,如何實現(xiàn)哟忍?

首先狡门,如果使用multiprocessing:
//#coding=utf-8
from multiprocessing import Process
import os
myCmd1='adb logcat -v time>c:/log/ll.txt'
myCmd2='adb shell monkey -p com.yoosal.kanku -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes --bugreport --throttle 1000 -v -v -v 100000'
//子進程要執(zhí)行的代碼
def run_proc1(name):
os.system(myCmd1)
def run_proc2():
os.system(myCmd2)
if name== 'main':
p1 = Process(target=run_proc1,args=('test',))
p2 = Process(target=run_proc2)
p1.start()
p2.start()
p1.join()
p2.join()
print('Child process end.')

運行結(jié)果:可正常并行進程1、進程2

如果使用subprocess:
import os
import subprocess
myCmd1='adb logcat -v time>c:/log/ll.txt'
myCmd2='adb shell monkey -p com.yoosal.kanku -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes --bugreport --throttle 1000 -v -v -v 100000'
child1=subprocess.Popen(myCmd1, shell=True,stdout=None)
child2=subprocess.Popen(myCmd2, shell=True,stdout=None)

運行結(jié)果:可正常并行進程1锅很、進程2

由此可見其馏,multiprocessing也能用于執(zhí)行外部指令,他們的區(qū)別呢爆安?叛复??求解

自己查到的答案是:
subprocess 用來執(zhí)行外部命令扔仓,是os.fork() 和 os.execve() 的封裝褐奥,即先fork一個子進程,再運行新的外部程序翘簇,子進程不會把父進程的模塊加載一遍撬码;
而multiprocessing的原理是fork,fork()調(diào)用:調(diào)用1次版保,返回兩次--操作系統(tǒng)自動把當前進程(父進程)復制了一份(子進程)呜笑,然后夫否,分別在父進程和子進程內(nèi)返回,父進程返回子進程的pid叫胁,子進程返回0凰慈,即父進程和子進程都在運行。
對于外部調(diào)用來說驼鹅,使用multiprocessing太占資源微谓。

這里又有另外一個問題:multiprocessing中,調(diào)用p.join()等待子進程執(zhí)行結(jié)束输钩,subprocess模塊--父進程如何監(jiān)聽子進程結(jié)束堰酿?
兩個方法:
subprocess.Popen()父進程開啟子進程后,不管其是否結(jié)束张足,直接執(zhí)行下一步触创;
subprocess.Call()父進程一直等待到子進程運行結(jié)束,再執(zhí)行下一步为牍;

現(xiàn)在一種場景:父進程中使用subprocess.Popen()開啟了3個子進程哼绑,要等到3個子進程全部結(jié)束后,父進程再執(zhí)行下一步碉咆,如何處理抖韩?
沒有找到可以在父進程里,直接一個方法可以判斷所有子進程是否結(jié)束的方法疫铜,那么常規(guī)方法就是自己做判斷咯:
//監(jiān)聽子進程是否結(jié)束茂浮,結(jié)束則返回True
def listen_to_child(ss):
i=0
while True:
if ss[i].poll()!=None: //poll返回碼:0 正常結(jié)束;1 sleep壳咕;
//2 子進程不存在席揽;-15 kill;None run
i=i+1
if i>=len(ss):
return True

`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谓厘,一起剝皮案震驚了整個濱河市幌羞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竟稳,老刑警劉巖属桦,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異他爸,居然都是意外死亡聂宾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門诊笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來系谐,“玉大人,你說我怎么就攤上這事盏混∥蹬福” “怎么了惜论?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長止喷。 經(jīng)常有香客問我馆类,道長,這世上最難降的妖魔是什么弹谁? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任乾巧,我火速辦了婚禮,結(jié)果婚禮上预愤,老公的妹妹穿的比我還像新娘沟于。我一直安慰自己,他們只是感情好植康,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布旷太。 她就那樣靜靜地躺著,像睡著了一般销睁。 火紅的嫁衣襯著肌膚如雪供璧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天冻记,我揣著相機與錄音睡毒,去河邊找鬼橡伞。 笑死资厉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鞋囊。 我是一名探鬼主播隅居,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼钠至,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了军浆?” 一聲冷哼從身側(cè)響起棕洋,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乒融,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摄悯,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赞季,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奢驯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片申钩。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘪阁,靈堂內(nèi)的尸體忽然破棺而出撒遣,到底是詐尸還是另有隱情邮偎,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布义黎,位于F島的核電站禾进,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廉涕。R本人自食惡果不足惜泻云,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狐蜕。 院中可真熱鬧宠纯,春花似錦、人聲如沸层释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贡羔。三九已至勃救,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間治力,已是汗流浹背蒙秒。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵统,地道東北人晕讲。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像马澈,于是被迫代替她去往敵國和親瓢省。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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