第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用python調(diào)用外部程序產(chǎn)生進(jìn)程,優(yōu)雅關(guān)閉的最佳實(shí)踐是什么?

使用python調(diào)用外部程序產(chǎn)生進(jìn)程,優(yōu)雅關(guān)閉的最佳實(shí)踐是什么?

慕工程0101907 2018-07-04 15:26:20
使用subprocess庫(kù):try:     p = subprocess.Popen(["ping", "-c", "5", "www.bing.com"], stdout=subprocess.PIPE)     p.wait()     except KeyboardInterrupt as e:     p.terminate()或者使用sh庫(kù):try:     p = sh.ping("-c", "5", "www.bing.com", _bg=True, _bg_exc=False,                  _out=sys.stdout, _err=sys.stderr)     p.wait()     except KeyboardInterrupt as e:     alive, _ = p.process.is_alive()         if alive:             p.process.terminate()這種結(jié)束外部進(jìn)程的方式有什么缺點(diǎn)?
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

這個(gè)問(wèn)題的需求是使用python調(diào)用外部的第三方程序,類(lèi)似shell腳本一樣。
如果是正常的多進(jìn)程編程協(xié)作完成一個(gè)任務(wù),那么當(dāng)然最好的方式是兩個(gè)進(jìn)程協(xié)作,即使用IPC的方式使父進(jìn)程傳遞給子進(jìn)程結(jié)束的信息,然后子進(jìn)程自己優(yōu)雅的退出。

而如果使用python調(diào)用外部的第三方命令,將其作為類(lèi)似shell腳本的方式使用,由于無(wú)法修改外部程序的代碼,因此IPC的手段非常有限,僅僅限于向子進(jìn)程發(fā)送信號(hào)。

那么該問(wèn)題的思路就很清晰了,我之前有一次是使用terminate()函數(shù)結(jié)束子進(jìn)程導(dǎo)致了子進(jìn)程無(wú)法正常釋放資源(linux系統(tǒng))。通過(guò)查詢文檔可知terminate()函數(shù)在linux系統(tǒng)下的行為是向進(jìn)程發(fā)送SIGTERM。那么,問(wèn)題的原因則是該第三方程序接收到SIGTERM信號(hào)后的處理邏輯有問(wèn)題。

因此,結(jié)束該進(jìn)程最好的方式是使用該第三方程序能夠接受的方式,這通過(guò)查閱該第三方程序的文檔可以得到。

比如說(shuō),命令行程序?qū)IGINT信號(hào)的考慮更完善,因?yàn)樵诮K端使用時(shí)按Ctrl-C發(fā)送的就是SIGINT信號(hào)。因此,對(duì)于大部分的第三方程序,發(fā)送SIGINT信號(hào)更好:

p.process.signal(signal.SIGINT)


查看完整回答
反對(duì) 回復(fù) 2018-07-14
  • 1 回答
  • 0 關(guān)注
  • 668 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)