我在这个关于terminating a thread的SO页面上阅读,并且接受的答案表明它通常是一个坏主意,但是当它可以接受时它们就是可以接受的情况。
话虽如此,假设我有一个while
和一个boolean
来指示循环是否应该停止,这是否终止了线程(如链接中所述),并认为是不好的做法?< / p>
示例:
from threading import Thread
import queue
def print_number(number_queue_display):
loop = True
numbers = []
while loop:
number = number_queue_display.get()
if number is not None:
numbers.append(number)
else:
loop = False
print(numbers)
number_queue = queue.Queue()
printing_numbers = Thread(target=print_number, args=(number_queue,),)
printing_numbers.start()
number_queue.put(5)
number_queue.put(10)
number_queue.put(15)
number_queue.put(20)
number_queue.put(None)
printing_numbers.join()
即使while
循环结束,线程也会继续并打印数字,就像这段代码在主线程中一样。
我完全清楚我不需要线程来使用while
循环打印数字,但我更大的问题是关于循环和boolean
答案 0 :(得分:1)
这是管理线程的一种非常好的方法。您有一个工作队列,并且当线程函数获得None
值时,您已定义了结束条件。
这与链接问题非常不同,问题是终止没有信号量,标志等的线程......本质上,试图终止一个没有设置合作方式的线程如此。
你的None
是一个告诉函数返回的标志。当线程函数返回时,其线程终止。