建立方法:
import threading
cond=threading.condition()
屬性方法:
acquire([timeout])/release(): 呼叫關聯的鎖的相應方法。 該物件使用的是rlock鎖。
wait([timeout]): 呼叫這個方法將使執行緒進入condition的等待池等待通知,並釋放鎖。
使用前線程必須已獲得鎖定,否則將丟擲異常。
notify(): 呼叫這個方法將從等待池挑選乙個執行緒並通知,收到通知的執行緒將自動呼叫
acquire()嘗試獲得鎖定(進入鎖定池);其他執行緒仍然在等待池中。呼叫這個方法不會
釋放鎖定。使用前線程必須已獲得鎖定,否則將丟擲異常。
notifyall(): 呼叫這個方法將通知等待池中所有的執行緒,這些執行緒都將進入鎖定池
嘗試獲得鎖定。呼叫這個方法不會釋放鎖定。使用前線程必須已獲得鎖定,否則將丟擲異常。
機械人對話測試**:
cond = threading.condition()
def robot1():
cond.acquire()
print('robot2在嗎?')
cond.notify()
cond.wait()
print('我是robot1.')
def robot2():
cond.acquire()
cond.wait()
print('在,請問你是?')
cond.acquire()
cond.notify()
cond.wait()
if __name__=='__main__':
t1 = threading.thread(target=robot1)
t2 = threading.thread(target=robot2)
t2.start()
time.sleep(1)
t1.start()
使用該物件需要注意的兩個點:
1、執行順序,開始時的接收者應該先進入wait()狀態。
2、wait()方法將在notify()和鎖釋放後才可以進行返回,因為notify()必須要在獲得鎖的情況下才能執行,所以鎖釋放(wait或release)必須在notify之後加上,經過測試,當另一線程呼叫notify時不會使得wait馬上返回,只有呼叫了鎖釋放,才會生效。
測試**的輸出結果:
robot2在嗎?
在,請問你是?
我是robot1.
建立方法:
import threading
event = threading.event()
物件屬性
wait():檢查標誌位,若為false則阻塞,等待true時返回。
clear():標誌為設定為false,此時的wait()方法將阻塞。
set():標誌位設定為true,wait()脫離阻塞狀態向下執行。
測試**:
event = threading.event()
def mainthread():
i = 0
while(true):
event.wait()
print(i)
i += 1
time.sleep(1)
def controlthread():
while(true):
print('start')
event.set()
time.sleep(5)
print('stop')
event.clear()
time.sleep(5)
if __name__=='__main__':
t1 = threading.thread(target=mainthread)
t2 = threading.thread(target=controlthread)
t1.start()
t2.start()
兩個執行緒,乙個執行緒每隔一秒輸出乙個數,另乙個執行緒每隔五秒控制一次開關變化(開變關,關變開),輸出結果:
start01
234stop
start56
789stop
...
執行緒之間的通訊
class resclass inthread extends thread override public void run else count count 1 2 class outthread extends thread override public void run 資料發生錯亂,造成...
程序之間 執行緒之間的通訊方式
1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...
多執行緒之間通訊
多執行緒之間通訊,其實就是多個執行緒在操作同乙個資源,但是操作的動作不同。需求 第乙個執行緒寫入 input 使用者,另乙個執行緒取讀取 out 使用者.實現讀乙個,寫乙個操作。共享資源源實體類 class res輸入執行緒資源 class intthrad extends thread overr...