進程數據隔離,守護進程,鎖,信號量和事件
阿新 • • 發佈:2018-07-25
port 系統 先後 天氣 pri *** strong sta fun
主要內容:
# Process
# 1.進程之間的數據隔離問題
# 2.守護進程
# 幾個進程的模型 ---- 進程同步的工具
# 有先後順序 就是同步
# 進程之間 就是異步
# 希望原本異步的多進程操作,維持一個順序 -- 同步工具
# 3.鎖 Lock *****
# 4.信號量 Semaphore ***
# 5.事件 Event **
1.進程之間的數據隔離問題
from multiprocessing import Process n = 100 def fun(): global n n -= 1 return n if __name__== ‘__main__‘: p = Process(target=fun) p.start() print(n) """ # 進程與進程之間的數據是隔離的 # 內存空間是不能共享的 # 所以要想進行通信,必須借助其他手段 # 且這兩個進程都是自願的 # 子進程的執行結果父進程獲取不到 # 父進程依賴子進程的執行結果呢 # 父進程如何獲取子進程的執行結果??? # 父子進程之間通過socket通信 """
2.守護進程
# 設置成守護進程之後 會有什麽效果呢?
# 守護進程會在主進程的代碼執行完畢之後直接結束,無論守護進程是否執行完畢
from multiprocessing importProcess import time def fun(): print("start") time.sleep(3) print("這是一個好天氣") if __name__ == ‘__main__‘: p = Process(target=fun) p.daemon = True # 守護進程的屬性,默認是False,如果設置成True,就表示設置這個子進程為一個守護進程 # 設置守護進程的操作應該在開啟子進程之前 p.start() time.sleep(1) print("主進程結束了!")# 設置成守護進程之後 會有什麽效果呢? # 守護進程會在主進程的代碼執行完畢之後直接結束,無論守護進程是否執行完畢
關於守護進程的一個需要註意的點,示例如下:(註意下面的fun2裏面的in fun2只運行了兩次,是跟隨主函數的)
import time from multiprocessing import Process def fun(): print("start") time.sleep(3) print("今天天氣不錯") def fun2(): while True: print("in fun2") time.sleep(0.5) if __name__ == ‘__main__‘: p = Process(target=fun) p.start() p = Process(target=fun2) p.daemon = True p.start() time.sleep(1) print("主程序結束了") """ 運行結果如下: in fun2 start in fun2 主程序結束了 今天天氣不錯 """
守擴應用主要有如下功能.:
# 報活 主進程還活著 # 100臺機器 100個進程 10000進程 # 應用是否在正常工作 - 任務管理器來查看 # 守護進程如何向監測機制報活???send/寫數據庫 # 為什麽要用守護進程來報活呢?為什麽不用主進程來工作呢??? # 守護進程報活幾乎不占用CPU,也不需要操作系統去調度 # 主進程能不能嚴格的每60s就發送一條信息
進程數據隔離,守護進程,鎖,信號量和事件