python线程停止写入输出队列

python线程停止写入输出队列,python,multithreading,queue,Python,Multithreading,Queue,我有一个线程,它从输入队列中读取数据,对其执行一些操作,然后将结果放在输出队列中,以便稍后使用。但是,线程似乎只能向输出队列写入一次。我做错了什么?下面是我的代码的高度简化、自包含的版本 import queue import threading def do_work(input_queue,output_queue): input_number = input_queue.get() output_number = input_number ** 2 input_

我有一个线程,它从输入队列中读取数据,对其执行一些操作,然后将结果放在输出队列中,以便稍后使用。但是,线程似乎只能向输出队列写入一次。我做错了什么?下面是我的代码的高度简化、自包含的版本

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

“结果”只打印一次,但我希望它打印多次,每次输入一次

当您在线程上调用
start
时,它开始执行您传递给它的函数。在本例中,调用队列的get方法,该方法将阻塞线程,直到输入队列至少有一个元素。只要输入队列有一个元素,函数就会继续执行,并将第一个输入放入输出队列。但是,请注意,一旦此操作完成一次,函数将返回,因此线程将退出

要使线程重复查询输入队列中的输入,您应该花一些时间将函数包装到开头。比如说

while True:
    input_number = input_queue.get()
    output_number = input_number ** 2   
    input_queue.task_done()
    output_queue.put(output_number)

在这种情况下,在查询、处理单个元素并将其放入输出队列后,工作线程将等待新的输入元素出现在输入队列中。一旦有一个元素,它将再次执行相同的处理步骤。

当您在线程上调用
start
时,它将开始执行您传递给它的函数。在本例中,调用队列的get方法,该方法将阻塞线程,直到输入队列至少有一个元素。只要输入队列有一个元素,函数就会继续执行,并将第一个输入放入输出队列。但是,请注意,一旦此操作完成一次,函数将返回,因此线程将退出

要使线程重复查询输入队列中的输入,您应该花一些时间将函数包装到开头。比如说

while True:
    input_number = input_queue.get()
    output_number = input_number ** 2   
    input_queue.task_done()
    output_queue.put(output_number)

在这种情况下,在查询、处理单个元素并将其放入输出队列后,工作线程将等待新的输入元素出现在输入队列中。一旦有了一个元素,它将再次执行相同的处理步骤。

您需要将代码包装在
do\u work()
的某种循环中。否则,它将执行一次,然后返回,这将导致线程退出。否则,它将执行一次,然后返回,这将导致线程退出。