在下面的代码中,如果我将其中一个url更改为无效内容,则整个过程将停止,并且无法使用ctrl + c退出form终端。所以我的问题是我应该如何在主线程运行方法中处理异常,如果发生错误,将其触发并转到下一个列表元素,而整个过程不会失败:#!/usr/bin/env pythonimport Queueimport threadingimport urllib2import timehosts = ["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)
1 回答

胡说叔叔
TA贡献1804条经验 获得超8个赞
使用一个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()
添加回答
举报
0/150
提交
取消