我制作了一个脚本来下载壁纸作为学习练习,以更好地熟悉 Python/Threading。除非尝试请求 URL 时出现异常,否则一切正常。这是我遇到异常的函数(不是同一类的方法,如果重要的话)。
def open_url(url):
"""Opens URL and returns html"""
try:
response = urllib2.urlopen(url)
link = response.geturl()
html = response.read()
response.close()
return(html)
except urllib2.URLError, e:
if hasattr(e, 'reason'):
logging.debug('failed to reach a server.')
logging.debug('Reason: %s', e.reason)
logging.debug(url)
return None
elif hasattr(e, 'code'):
logging.debug('The server couldn\'t fulfill the request.')
logging.debug('Code: %s', e.reason)
logging.debug(url)
return None
else:
logging.debug('Shit fucked up2')
return None
在我的脚本结束时:
main_thread = threading.currentThread()
for thread in threading.enumerate():
if thread is main_thread: continue
while thread.isAlive():
thread.join(2)
break
根据我目前的理解(这可能是错误的),如果线程未在 2 秒内完成它的任务,它应该超时。相反,它会坚持最后一段时间。如果我把它拿出来,它只会在脚本执行完成后挂起。
另外,我决定是时候做好准备,离开 Notepad++ 去使用带有调试工具的真正 IDE,所以我下载了 Wing。我是Wing的忠实粉丝,但脚本不挂在那里......你们都用什么来写Python?