現在、並行処理について勉強中なのですが、
queueモジュールのドキュメントに次のようなサンプルコードがあります。
この無限ループが終了する理由がわからないため教えて頂きたいです。
https://docs.python.org/3/library/queue.html
import threading, queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # turn-on the worker thread threading.Thread(target=worker, daemon=True).start() # send thirty task requests to the worker for item in range(30): q.put(item) print('All task requests sent\n', end='') # block until all tasks are done q.join() print('All work completed')
上記では、スレッドは次のようにバックグラウンドで開始しているのだと思っています。
threading.Thread(target=worker, daemon=True).start()
worker()は, while True: で無限ループして、キューが追加されたら処理して、
処理が終わったらq.task_done()で終わったことを通知してを繰り返し、
全部のキューの処理が終わるまでq.join()でブロックして、全部終わったら最後のprint文が表示される・・・
と、ざっくりこういった流れかと思います。
今、ノートブック(jupyter lab)で動かしているのですが、無限ループをバックグラウンドで実行しているのに、
q.join()の後でセルの実行がちゃんと終了することに疑問をもっています。
「なぜ無限ループを回しているはずのスレッドが終了するのか」がよくわかっていません。
どなたかご教示頂けますと幸いです。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/03 02:00