1. 程式人生 > >孤兒程序,殭屍程序,multiprocessing 模組建立程序

孤兒程序,殭屍程序,multiprocessing 模組建立程序

程序相關函式使用

os.getpid()
功能 : 獲取當前程序的PID號
返回值 : 返回PID號

os.getppid()
功能 : 獲取父程序的程序號
返回值 : 返回PID號

os._exit(status)
功能 : 退出程序
引數 : 程序的退出狀態  整數

sys.exit([status])
功能: 退出程序
引數: 預設為0  如果是整數則表示退出狀態
                如果是字串則表示退出時列印內容

* sys.exit 可以通過捕獲SystemExit異常阻止退出

孤兒程序 : 父程序先於子程序退出,此時子程序就會成為孤兒程序。

* 孤兒程序會被系統指定的程序收養,即系統程序會成為該孤兒程序新的父程序。孤兒程序退出時該父程序會處理退出狀態

殭屍程序 : 子程序先於父程序退出,父程序沒有處理子程序退出狀態,此時子程序成為殭屍程序

* 殭屍程序已經結束,但是會滯留部分PCB資訊在記憶體,大量的殭屍會消耗系統資源,應該儘量避免

如何避免殭屍程序產生

* 父程序處理子程序退出狀態
 
  pid,status = os.wait()
  功能 :在父程序中阻塞等待處理子程序的退出
  返回值 : pid  退出的子程序的PID號
            status  子程序的退出狀態 
  
  pid,status = os.waitpid(pid,option)
  功能 : 同wait
  引數 : pid   -1  表示任意子程序退出
                >0  整數  指定PID號的子程序退出
    option   0  表示阻塞等待
           WNOHANG  表示非阻塞
  返回值 : 同wait

  waitpid(-1,0)   ======  wait()

* 父程序先退出
  建立二級子程序 
    1. 父程序建立子程序等待子程序退出
    2. 子程序建立二級子程序,然後馬上退出
    3. 二級子程序成為孤兒,處理具體事件


寫一個聊天室

功能 : 類似qq群聊
1. 進入聊天室需要輸入使用者名稱
2. 有人進入聊天室 其他人會收到提示
   xxx 進入聊天室
3. 某人發訊息,則其他人都能收到
   xxx 說: xxxxxxxxx
4. 有人退出聊天室 其他人會收到提示
   xxx 退出了聊天室
5. 管理員功能,管理員喊話聊天室所有人都能收到

 服務端  客戶端
 * 整體實現方案
 * 用什麼技術

1. 用什麼技術
  
  socket通訊   ----> 訊息轉發 ----》 UDP通訊
  
  轉發模式 --->  每個將訊息傳送給伺服器,伺服器發                送個每個成員
  
  訊息收發  ---> 使用多程序讓傳送和接受互不影響
 
  儲存使用者  --->  字典 或者 列表 
                  姓名,地址

注意 : 使用一定的封裝性
        測試 , 每個功能進行測試

程式碼編寫

先搭建網路連線 --》 多程序建立 --》每個功能編寫--
》功能測試

客戶端
  * 登入   "L name" 
    伺服器 : 識別請求 判斷是否可以登入
              保留使用者
          將登入訊息通知其他人

  * 聊天   "C name message"
    伺服器 : 識別請求
              將訊息轉發給其他人

  * 退出   "Q name"
    伺服器 : 識別請求
              告知其他人退出
          從結構中刪除使用者

伺服器
 
  
multiprocessing 模組建立程序

1. 需要將要做的事件封裝為函式
2. 使用multiprocessing中提供的Process類建立程序物件
3.通過程序物件和Process 初始化函式 對程序進行設定,並且繫結要執行的事件
4. 啟動程序,會自動執行相關聯函式
5. 事件完成後回收程序

建立程序物件

Process()
功能 : 建立程序物件
引數 : name :  給建立的程序起一個名字
                預設Process-1
    target : 繫結的函式

    args : 元組 給target函式按照位置傳參
    kwargs : 字典 給target函式按照鍵值出傳參
 
p.start()
功能: 啟動程序,此時程序被建立。自動執行程序函式

p.join([timeout])
功能 : 阻塞等待回收響應的程序
引數 : 超時時間

* multiprocessing建立程序是原來程序的子程序,建立後父子程序各自執行互不影響
* 子程序同樣是複製父程序的空間,子程序對內容的修改不會影響父程序空間
* join回收子程序,會有效的阻止殭屍程序產生