我发现这篇文章是关于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。程序结束时该线程会发生什么?
答案 0 :(得分:2)
这取决于“程序结束”的含义。如果主线程刚刚到达执行结束,则有两种可能:
如果线程是非守护进程threading.Thread
,则正在运行的线程将使程序无限期地保持活动状态。
如果线程是守护进程,则主线程结束后线程将突然终止。
daemon
属性在以下文档中描述:
一个布尔值,指示此线程是否是守护程序线程 (真)与否(假)。这必须在调用start()之前设置, 否则引发RuntimeError。它的初始值是继承自的 创建线程;主线程不是守护程序线程 因此,在主线程中创建的所有线程都默认为daemon = 假
当没有活着的非守护程序线程时,整个Python程序退出。
如果“程序结束”表示进程获得SIGTERM或SIGKILL或类似的东西,那么该线程将与程序的其余部分一起终止,即使它不是daemon
。