13.1、多進程:進程鎖Lock、信號量、事件
阿新 • • 發佈:2018-02-10
什麽 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()
以後遇到更好的例子再做補充。
信號量:
- 信號量可以限制進入的進程的數量。
- 如何使用信號量:
- 創建信號量對象:信號量對象=multiprocessing.BoundedSemaphore(x),x是限制進程的數量
- 當有進程需要進入的時候,調用acquire()來減少信號量:信號量對象.acquire()
- 當有進程離開的時候,調用release()來增加信號量:信號量對象.release()
以後遇到更好的例子再做補充。
事件:
- 如何使用事件:
- 創建事件對象:事件對象=multiprocessing.Event()
- 設置事件:事件對象.set() 判斷事件是否set:事件對象.is_set(),等待事件set:事件對象.wait()
- 清除事件:事件對象.clear()
13.1、多進程:進程鎖Lock、信號量、事件