如果一个线程在无限的while循环python中会发生什么

时间:2014-10-01 14:06:03

标签: python multithreading blockingqueue

我发现这篇文章是关于python中的队列:http://www.blog.pythonlibrary.org/2012/08/01/python-concurrency-an-example-of-a-queue/

它工作正常,但我对此有疑问。在线程的run方法中我们看到:

def run(self):
    while True:
        # gets the url from the queue
        url = self.queue.get()

        # download the file
        self.download_file(url)

        # send a signal to the queue that the job is done
        self.queue.task_done()

线程处于无限的while循环中而没有调用break。程序结束时该线程会发生什么?

1 个答案:

答案 0 :(得分:2)

这取决于“程序结束”的含义。如果主线程刚刚到达执行结束,则有两种可能:

  1. 如果线程是非守护进程threading.Thread,则正在运行的线程将使程序无限期地保持活动状态。

  2. 如果线程是守护进程,则主线程结束后线程将突然终止。

  3. daemon属性在以下文档中描述:

      

    一个布尔值,指示此线程是否是守护程序线程   (真)与否(假)。这必须在调用start()之前设置,   否则引发RuntimeError。它的初始值是继承自的   创建线程;主线程不是守护程序线程   因此,在主线程中创建的所有线程都默认为daemon =   假

         

    当没有活着的非守护程序线程时,整个Python程序退出。

    如果“程序结束”表示进程获得SIGTERM或SIGKILL或类似的东西,那么该线程将与程序的其余部分一起终止,即使它不是daemon