如何使用线程正确结束程序?

时间:2013-10-24 11:47:14

标签: python multithreading

我有一个类从队列中提取项目,然后在其上运行代码。我还在main函数中有代码,它将项添加到队列中进行处理。

出于某种原因,该程序不希望正确结束。

以下是代码:

class Downloader(Thread):

    def __init__(self, queue):
        self.queue = queue
        Thread.__init__(self)

    def run(self):
        while True: 
            download_file(self.queue.get())
            self.queue.task_done()

def spawn_threads(Class, amount):   
    for t in xrange(amount): 
        thread = Class(queue)
        thread.setDaemon = True
        thread.start()

if __name__ == "__main__":
    spawn_threads(Downloader, 20)
    for item in items: queue.put(item)
    #not the real code, but simplied because it isn't relevant

    print 'Done scanning. Waiting for downloads to finish.'
    queue.join()
    print 'Done!'

程序等待它在queue.join()处正确完成并打印Done!,但有些东西使程序无法关闭,我似乎无法将手指放在上面。我假设它是while True循环,但我认为将线程设置为守护进程是为了解决这个问题。

1 个答案:

答案 0 :(得分:2)

您没有正确使用setDaemon() 。因此,Downloader个线程都不是守护线程。

而不是

thread.setDaemon = True

thread.setDaemon(True)

thread.daemon = True

The docs似乎暗示后者是Python 2.6 +中首选的拼写。)