입력 대기열에서 데이터를 읽은 스레드가 스레드와 함께 처리 한 다음 결과를 출력 대기열에 넣어 나중에 사용합니다. 그러나 스레드는 출력 대기열에 한 번만 쓸 수 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 다음은 매우 단순화 된 자체 코드로 작성된 코드입니다.파이썬 스레드가 출력 대기열에 쓰기를 중지합니다.
input: 0
result: 0
input: 2
input: 3
input: 4
...
input: 999
은 "결과"회만 인쇄되지만 I는 각 입력에 대해 한 번씩 여러 번 인쇄 예상 :
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()
이것은 다음 출력을 초래한다.
어떤 종류의 루프에서'do_work()'에 코드를 래핑해야합니다. 그렇지 않으면 한 번 실행 한 다음 반환하면 스레드가 종료됩니다. –