輸入スレッド 輸入ランダム 読み込み時間 gMoney = 1000 グロック= threading.Lock() gTotalTimes = 10 gTimes = 0 クラスのプロデューサー(threading.Thread): デフ実行します(自己): グローバルgMoney グローバルgTimes 真しばらく: お金= random.randint(100 、1000) gLock.acquire() の場合gTimes> = gTotalTimes: gLock.release() ブレイク gMoney + =お金の 印刷( '%sの生产了%D元钱、剩余%D元钱' %(threading.current_thread()、お金、gMoney)) gTimes + = 1 gLock.release() time.sleep(0.5) (threading.Threadの)クラスの消費者: DEF RUN(セルフ): グローバルgMoney しばらく真: マネーrandom.randint =(100,1000) gLock.acquire() IF gMoney> =マネー: gMoney - =マネー 印刷( '個人消費の%sの%dのドル、残りドル%D' %(threading.current_thread()、マネー、gMoney)) 他: gTimes> = gTotalTimes IF: gLock.release() BREAKの 印刷( ' %sの%D未満!「%(threading.current_thread()、マネー、gMoney))残り%dのドルを消費する準備ができて、消費者のドル gLock.release() time.sleep(0.5) メインDEF(): 。Xの範囲内(3) : T =コンシューマ(NAME = 'Dコンシューマスレッド%' %X) t.start() のためのX範囲(5): T =プロデューサー(名= "プロデューサスレッド%D" %のX) t.start() IF __name__ == '__main__': メイン()
キューインポートキューから インポート通し インポート時間 DEF試験(): Q =キュー(4) の範囲内のiについて(4): q.put(I) の範囲内のiについて(4): プリント(q.get()) 印刷(q.full()) プリント(q.empty()) プリント(q.qsize()) DEF SET_VALUE(Q): インデックス= 0 一方TRUE: q.put(インデックス) 指数+ = 1 time.sleep(1) (Q)DEF GET_VALUE: しばらくTRUE: プリント(q.get()) DEFメイン(): Q =キュー(4) T1 = threading.Thread(目標= SET_VALUE、引数= [Q]) T2 = threading.Thread(ターゲット= GET_VALUE、引数= [Q]) t1.start() t2.start() の場合__name__ == '__main__': メイン()