结束循环终止线程

时间:2018-05-07 04:40:25

标签: python multithreading

我在这个关于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

1 个答案:

答案 0 :(得分:1)

这是管理线程的一种非常好的方法。您有一个工作队列,并且当线程函数获得None值时,您已定义了结束条件。

这与链接问题非常不同,问题是终止没有信号量,标志等的线程......本质上,试图终止一个没有设置合作方式的线程如此。

你的None是一个告诉函数返回的标志。当线程函数返回时,其线程终止。