1. 程式人生 > >Python 執行緒條件(Condition),(執行緒等待另一個執行緒的執行)

Python 執行緒條件(Condition),(執行緒等待另一個執行緒的執行)

執行緒1執行(cond),執行緒1執行一半等待(cond.wait()),執行緒2開始執行(cond),執行緒2執行完畢後(cond.notify()),執行緒1再接著執行。

import threading
import time

def go1():
    with cond:  #使用條件變數(資源 Lock)
        for  i  in range(8):
            time.sleep(1)
            print(threading.current_thread().name,i,"go11")
            if i==5:   
                cond.wait() #等待cond.notify(),再繼續執行。(釋放條件變數(資源 Lock))

def go2():
    with  cond:  #使用條件變數(資源 Lock)
        for i in range(7):
            time.sleep(1)
            print(threading.current_thread().name, i)
        cond.notify()  #通知,觸發 cond.wait()。(釋放條件變數(資源 Lock))

cond=threading.Condition()  #執行緒條件變數
threading.Thread(target=go1).start()  #和下面的執行緒的次序不能調。這個執行緒先拿到cond條件變數(資源 Lock)
threading.Thread(target=go2).start()  #這個執行緒不會先拿到cond條件變數(資源 Lock)