Python提供了丰富的模块,为我们编写多线程应用程序提供了很好的支持。但是这方面的文档并不多,经过一些摸索,我写了一个简单的多线程下载的例子,并做了详细的注释,以后创建多线程程序时可以拿来作为参考。
几个需要注意的点
- 子线程不能用
join
方法,否则会造成阻塞,导致GUI主程序主循环无法启动,界面无法出来; - 子线程读取队列时要加锁,保证线程安全性
- 子线程需要使用
setDeamon
函数显式声明,这样GUI界面退出后子线程也会退出,或者可以使用thread.daemon = True
来设置
一个教训
urllib2
的urlopen
方法可以设置一个超时时间,而urllib
不可以,我最开始使用了urllib,这样会引发一个TypeError
错误,而我在捕获异常时并没有做仔细区分,导致TypeError被人为忽略了,所以一定要多看文档,熟记各个模块的用法和参数,一些细小的差别尤其要注意。
代码
1 | #!/usr/bin/env python |
后记
这个代码源自百度贴吧上的一个问题,平时很少上百度贴吧,昨天进去逛就一下子碰到了,也算是机缘巧合吧。不过我没有百度帐号,帮不了他,只好写在我博客这里了。实际上写代码的动力不一定来自于自己的某种需求,更多的来自于兴趣和爱好,不仅自己增长了知识,同时还能帮助到别人,这也就再好不过了^_^。