條件對象總是與某種類型的鎖對象相關聯,鎖對象可以通過傳入獲得,或者在缺省的情況下自動創建。
threading.Condition(lock=None)
實現條件對象的類。它具有如下方法:
acquire(*args):請求底層鎖。
release():釋放底層鎖。
wait(timeout=None):等待直到被通知或發生超時。
wait_for(predicate,timeout=None):等待直到條件計算為True,predicate是一個可調用對象且它的返回值可被解釋為一個布爾值。
notify(n=1):默認喚醒一個等待該條件的線程。
notify_all():喚醒所有正在等待該條件的線程。
使用條件對象的典型場景是將鎖用于同步某些共享狀態的權限,那些關注某些特定狀態改變的線程重復調用wait()方法,直到所期望的改變發生;對于修改狀態的線程,它們將當前狀態改變為可能是等待者所期待的新狀態后,調用notify()方法或者notify_all()方法。
importtimeimportthreading#創建條件對象c=threading.Condition()privilege=0defgetPri():globalprivilegec.acquire()c.wait()print(privilege)c.release()defupdPri():time.sleep(5)c.acquire()globalprivilegeprivilege=1c.notify()c.release()if__name__=='__main__':t1=threading.Thread(target=getPri)t2=threading.Thread(target=updPri)t1.start()t2.start()
以上內容為大家介紹了Python條件對象,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。