urllib2.urlopen不能与单独的线程一起工作

2024-04-26 23:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个应用程序来下载网页的代码并捕获链接。 它可以工作,但是如果我将程序连接到GUI,它会锁定相应的按钮,直到下载完成。在

如果我通过一个单独的线程触发下载,以避免按钮锁定,它只是冻结而不完成执行。在

这正常吗?还是我错过了什么?在

下面是代码片段。如果我从一个单独的线程调用grab(),则不会发生任何事情,也不会出现错误。在

函数update_observer()只通知观察者,不执行其他操作。 观察者负责进行任何更改,在本例中,重画GUI。在

def grab(self, url):        
        try:
            self._status = 'Downloading page.'
            self.update_observers()
            inpu = urllib2.urlopen(url)

        except URLError, e:
            self._status = 'Error: '+ e.reason
            self.update_observers()
            return None

        resp = []  
        self._status = 'Parsing links'
        self.update_observers()
        for line in inpu.readlines():
            for reg in self._regexes:
                links = reg.findall(line)
                for link in links:
                    resp.append(link)

        self._status = 'Ready.'
        self.update_observers()
        return resp

此代码称为:

^{pr2}$

如果我可以把线程移走的话。在


Tags: 代码inselfurlforstatusupdategui