我想同时下载多张图片。为此,我使用线程,每个人使用urllib2模块下载图像。我的问题是,即使线程同时启动(几乎),图像也会逐个下载,就像在单线程环境中一样。
这是线程函数:
def updateIcon(self, iter, imageurl):
req = urllib2.Request('http://site.com/' + imageurl)
response = urllib2.urlopen(req)
imgdata = response.read()
gobject.idle_add(self.setIcon, iter, imgdata)
调试我的代码我发现下载似乎停留在“response = urllib2.urlopen(req)”行。有什么问题?这是因为线程模块还是urllib2?我该如何解决这个问题?
提前谢谢
答案 0 :(得分:3)
考虑使用urllib3。它通过进程(而不是线程)支持连接池和多个并发请求。它应该解决这个问题。如果您联系许多不同的站点,请小心垃圾收集连接池,因为每个站点都有自己的池。
答案 1 :(得分:0)
根据我的经验,CPython的多线程似乎比sigle线程的性能更好。因为CPython具有基于内核线程的线程实现。但由于GIL(Global Interpreter Lock),差异很小。用多线程替代多处理。这很简单。两者都有类似的界面。