那么,这段代码是如何在线程启动时退出while语句的呢? (请不要考虑缩进)
class ThreadUrl(threading.Thread):
"""Threaded Url Grab"""
def __init__(self, queue, out_queue):
threading.Thread.__init__(self)
self.queue = queue
self.out_queue = out_queue
def run(self):
while True:
#grabs host from queue
host = self.queue.get()
#grabs urls of hosts and then grabs chunk of webpage
url = urllib2.urlopen(host)
chunk = url.read()
#place chunk into out queue
self.out_queue.put(chunk)
#signals to queue job is done
self.queue.task_done()
** 编辑 *
启动线程的代码:
def main():
#spawn a pool of threads, and pass them queue instance
for i in range(5):
t = ThreadUrl(queue)
t.setDaemon(True)
t.start()
queue.join()
请您参考如下方法:
它不必退出 while 语句来终止代码。这里发生的一切是线程消耗了队列中的所有内容,此时 queue.join() 返回。
一旦主代码中对 queue.join() 的调用返回,主代码将退出,因为您将线程标记为守护进程,整个应用程序将退出,您的后台线程将退出被杀。
