1

以下のコードで、URLの1つを無効なものに変更すると、プロセス全体が停止し、 ctrl+c を使用してフォームターミナルを終了できませんでした。したがって、私の質問は、メインスレッドの実行メソッドで例外を処理する方法と、エラーが発生した場合にそれをトリガーして、プロセス全体で失敗することなく次のリスト要素に移動する方法です:

#!/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)
4

1 に答える 1