多个urllib2连接

时间:2010-11-10 00:02:14

标签: python multithreading urllib2

我想同时下载多张图片。为此,我使用线程,每个人使用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?我该如何解决这个问题?

提前谢谢

2 个答案:

答案 0 :(得分:3)

考虑使用urllib3。它通过进程(而不是线程)支持连接池和多个并发请求。它应该解决这个问题。如果您联系许多不同的站点,请小心垃圾收集连接池,因为每个站点都有自己的池。

答案 1 :(得分:0)

根据我的经验,CPython的多线程似乎比sigle线程的性能更好。因为CPython具有基于内核线程的线程实现。但由于GIL(Global Interpreter Lock),差异很小。用多线程替代多处理。这很简单。两者都有类似的界面。