條件對象總是與某種類型的鎖對象相關(guān)聯(lián),鎖對象可以通過傳入獲得,或者在缺省的情況下自動創(chuàng)建。
threading.Condition(lock=None)
實現(xiàn)條件對象的類。它具有如下方法:
acquire(*args):請求底層鎖。
release():釋放底層鎖。
wait(timeout=None):等待直到被通知或發(fā)生超時。
wait_for(predicate,timeout=None):等待直到條件計算為True,predicate是一個可調(diào)用對象且它的返回值可被解釋為一個布爾值。
notify(n=1):默認喚醒一個等待該條件的線程。
notify_all():喚醒所有正在等待該條件的線程。
使用條件對象的典型場景是將鎖用于同步某些共享狀態(tài)的權(quán)限,那些關(guān)注某些特定狀態(tài)改變的線程重復(fù)調(diào)用wait()方法,直到所期望的改變發(fā)生;對于修改狀態(tài)的線程,它們將當前狀態(tài)改變?yōu)榭赡苁堑却咚诖男聽顟B(tài)后,調(diào)用notify()方法或者notify_all()方法。
importtimeimportthreading#創(chuàng)建條件對象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()
以上內(nèi)容為大家介紹了Python條件對象,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。