0
我有一個線程從輸入隊列中讀取數據,對它執行某些操作,然後將結果放到輸出隊列中以供以後使用。但是,它看起來像線程只能寫入輸出隊列一次。我究竟做錯了什麼?以下是我的代碼的高度簡化的自包含版本。python線程停止寫入輸出隊列
import queue
import threading
def do_work(input_queue,output_queue):
input_number = input_queue.get()
output_number = input_number ** 2
input_queue.task_done()
output_queue.put(output_number)
input_queue = queue.LifoQueue()
output_queue = queue.LifoQueue()
t = threading.Thread(name="Some thread", target=do_work, args=(input_queue,output_queue))
t.start()
for i in range(1000):
input_queue.put(i)
if output_queue.empty():
print('input: {0}'.format(i))
else:
result = output_queue.get()
print('result: {0}'.format(result))
output_queue.task_done()
這導致下面的輸出:
input: 0
result: 0
input: 2
input: 3
input: 4
...
input: 999
「結果」僅印刷一次,但我希望它爲每個輸入被打印多次,一次。
你需要用'do_work()'在某種循環中包裝代碼。否則,它會執行一次然後返回,這會導致線程退出。 – 2017-10-29 04:10:07