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