Python併發程式設計之程序(殭屍程序 孤兒程序)

2021-10-09 00:14:55 字數 2689 閱讀 5140

前言:本博文是對python併發程式設計之程序的知識延伸,主要講解:殭屍程序、孤兒程序。

python多程序中的multiprocessing

python多程序中的fork

python併發程式設計之程序(守護程序、鎖、訊號量)

四、知識擴充套件

在前面的博文裡,我們介紹到:正常情況下,子程序是通過父程序建立的,子程序在建立新的程序。子程序的結束和父程序的執行是乙個非同步過程,即父程序永遠無法**子程序到底什麼時候結束。 當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait()或者waitpid()系統呼叫取得子程序的終止狀態。也就是說:父程序會預設等待子程序的執行,在所有子程序都結束之後,父程序再結束。

殭屍程序:主程序在建立子程序的時候,如果子程序退出,而父程序並沒有呼叫waitwaitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序。

import time, sys

from multiprocessing import process, current_process

deffunc()

:print

('子程序pid'

, current_process(

).pid)

print

('子程序退出'

)def

main()

:print

('父程序pid'

, current_process(

).pid)

p = process(target=func)

p.start(

) time.sleep(10)

print

('父程序退出'

) sys.exit(

)# 退出程式

# p.join(timeout=1) # 如果**失敗,則不**

# timeout 父程序只會阻塞等待1秒常識**子程序。

孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。

from multiprocessing import process, current_process

import time, sys

deffunc()

:# 孤兒程序,父程序早於子程序退出

print

('子程序pid'

, current_process(

).pid)

time.sleep(10)

print

('子程序退出'

)def

main()

:print

('子程序pid'

, current_process(

).pid)

p = process(target=func)

p.start(

)print

('父程序退出'

) sys.exit(

)# 退出程式

# p.join(timeout=1) # 如果**失敗,則不**

# timeout 父程序只會阻塞等待1秒常識**子程序。

# 父程序早於子程序退出,此時子程序一直會被1號程序**,監控

deffunc()

: pid = os.fork(

)# fork()會執行分割成兩部分,呼叫一次,返回兩次,且在fork()在linux執行。

if pid ==0:

# 子程序pid為0

time.sleep(10)

print

('我是子程序'

)if pid >0:

# 父程序pid為子程序的pid

print

('我是父程序,我開啟的子程序pid是'

, pid)

if __name__ ==

'__main__'

: func(

)

在linux中,有這麼乙個機制:父程序無論什麼時候都可以獲取到子程序的的 一些資料。那麼當子程序任務執行完畢後,確實結束了,但是仍然保留一些資料,目的是為了讓父程序能夠獲取這些資訊。linux中可以呼叫waitwaitpid來徹底清除子程序的殘留資訊。

在python中已經封裝了處理殭屍程序的操作,所以我們無需關心。孤兒程序的話,因為它是沒有父程序的程序,那麼孤兒程序這個重任就落到了init程序身上,它會處理做好一切善後工作,因此孤兒程序並不會有什麼危害。

Python併發程式設計之程序池

前言 本博文主要講解python併發程式設計中的程序池 pool python多程序中的multiprocessing python多程序中的fork python程序通訊之queue 當我們需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但...

併發程式設計之程序

在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組與多執行緒模組threading的程式設計介面類似。multiprocessing模組的功能眾多 支援子程序 ...

python之路 併發程式設計之程序 IPC

ipc 程序間的通訊 兩種實現方式 管道 pipe 佇列 queue 其實就是pipe lock 注意 兩者實際上都是記憶體空間,不要往裡面放入大資料,只能放資料量較小的訊息 ipc所解決的問題 1.當多個任務併發的去修改共享資料,就可能會造成資料錯亂,我們通過加互斥鎖使多個任務對共享資料的操作由併...