1. 程式人生 > >進程數據隔離,守護進程,鎖,信號量和事件

進程數據隔離,守護進程,鎖,信號量和事件

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 import
Process 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就發送一條信息

進程數據隔離,守護進程,鎖,信號量和事件