python线程异常导致停止进程

在下面的代码中,如果我将其中一个url更改为无效内容,则整个过程将停止,并且无法使用ctrl + c退出form终端。所以我的问题是我应该如何在主线程运行方法中处理异常,如果发生错误,将其触发并转到下一个列表元素,而整个过程不会失败:


#!/usr/bin/env python

import Queue

import threading

import urllib2

import time


hosts = ["http://yahoo.com", "http://google.com", "http://amazon.com","http://apple.com"]


queue = Queue.Queue()


class ThreadUrl(threading.Thread):

    """Threaded Url Grab"""

    def __init__(self, queue):

        threading.Thread.__init__(self)

        self.queue = queue


    def run(self):

        while True:

            #grabs host from queue

            host = self.queue.get()


            #grabs urls of hosts and prints first 1024 bytes of page

            url = urllib2.urlopen(host)

            print "connected"


            #signals to queue job is done

            self.queue.task_done()



start = time.time()

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()



    #populate queue with data

    for host in hosts:

        queue.put(host)


    #wait on the queue until everything has been processed

    queue.join()

main()

print "Elapsed Time: %s" % (time.time() - start)


GCT1015
浏览 279回答 1
1回答

胡说叔叔

使用一个finally块来确保即使出现错误,线程也总是发出信号。def run(self):    while True:        #grabs host from queue        host = self.queue.get()        #grabs urls of hosts and prints first 1024 bytes of page        try:            url = urllib2.urlopen(host)            print "connected"        except urllib2.URLError:            print "couldn't connect to %s" % host        finally:            #signals to queue job is done            self.queue.task_done()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python