我有一个类从队列中提取项目,然后在其上运行代码。我还在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
循环,但我认为将线程设置为守护进程是为了解决这个问题。
答案 0 :(得分:2)
您没有正确使用setDaemon()
。因此,Downloader
个线程都不是守护线程。
而不是
thread.setDaemon = True
写
thread.setDaemon(True)
或
thread.daemon = True
(The docs似乎暗示后者是Python 2.6 +中首选的拼写。)