queueの最大数を2個として満杯の場合は待機、
空きができ次第queueを追加するような処理がしたいです。
python
1from threading import Thread, active_count 2from queue import Queue 3import time 4 5queue = Queue() 6 7 8def main(q): 9 i = q.get() 10 print('スレッド ' + str(i) + ' 開始') 11 time.sleep(i * 2) 12 print('スレッド ' + str(i) + ' 終了') 13 queue.task_done() 14 15if __name__ == '__main__': 16 for i in 10, 5, 2: 17 th = Thread(target=main, args=(queue,)) 18 th.start() 19 queue.put(i) 20 if active_count() > 2: 21 queue.join()
上記のコードを実行したら結果は以下になります。
スレッド 10 開始
スレッド 5 開始
スレッド 5 終了
スレッド 10 終了
スレッド 2 開始
スレッド 2 終了
queue.join()を使うとqueueが全て無くなるまで待機となるので目的と合致しません。
目的は以下のようにしたいです。
スレッド 10 開始
スレッド 5 開始
スレッド 5 終了
スレッド 2 開始
スレッド 2 終了
スレッド 10 終了
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/29 04:19
2016/09/29 04:28 編集
2016/09/29 05:26
2016/09/29 09:33