我正在开发一个应用程序来下载网页的代码并捕获链接。 它可以工作,但是如果我将程序连接到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}$如果我可以把线程移走的话。在
我刚才在^{之前给
gtk.gdk.threads_init()
打了个电话,一切正常,没有任何变化。在相关问题 更多 >
编程相关推荐