为了账号安全,请及时绑定邮箱和手机立即绑定

python线程异常导致停止进程

python线程异常导致停止进程

GCT1015 2021-03-12 15:18:14
在下面的代码中,如果我将其中一个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()


查看完整回答
反对 回复 2021-03-27
  • 1 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号