1. 程式人生 > >13.1、多進程:進程鎖Lock、信號量、事件

13.1、多進程:進程鎖Lock、信號量、事件

什麽 target color bound 設置事件 pre 離開 proc 信號


進程鎖:

  • 為什麽要有進程鎖:假如現在有一臺打印機,qq要使用打印機,word文檔也要使用打印機,如果沒有使用進程鎖,可能會導致一些問題,比如QQ的任務打印到一半,Word插進來,於是打印出來的結果是各自一半。
  • 進程鎖的創建與使用:
    • 1.導入模塊,from multiprocessing import Lock
    • 2.創建鎖對象:lock=Lock()
    • 3.在需要鎖的地方:lock.acquire()
    • 4.在釋放的地方:lock.release()
from multiprocessing import Lock,Process

def f(l,num):
    l.acquire()
    
try: print("printer used done",num) finally: l.release() if __name__ == "__main__": lock=Lock() for num in range(10): Process(target=f, args=(lock,num)).start()

以後遇到更好的例子再做補充。


信號量:

  • 信號量可以限制進入的進程的數量。
  • 如何使用信號量:
    1. 創建信號量對象:信號量對象=multiprocessing.BoundedSemaphore(x),x是限制進程的數量
    2. 當有進程需要進入的時候,調用acquire()來減少信號量:信號量對象.acquire()
    3. 當有進程離開的時候,調用release()來增加信號量:信號量對象.release()

以後遇到更好的例子再做補充。


事件:

  • 如何使用事件:
    1. 創建事件對象:事件對象=multiprocessing.Event()
    2. 設置事件:事件對象.set() 判斷事件是否set:事件對象.is_set(),等待事件set:事件對象.wait()
    3. 清除事件:事件對象.clear()
以後遇到更好的例子再做補充。

13.1、多進程:進程鎖Lock、信號量、事件