多线程下载图片 求助

Win_Man 杭州沃趣科技股份有限公司 MySQL DBA  2016-02-09 12:03:40
最近写爬虫需要下载大量的图片,我把需要下载的图片的url保存在url_list列表中,,因为单线程下载太慢,所以我想用多线程来下载,但是遇到的问题是,多线程中一部分线程结束之后,就没有动静了,程序并没有结束,是死锁了吗
我用了代理,每个线程使用的不同的代理,代理ip是我从代理网站上抓下来的
附上代码
线程函数:

def downloadImg(url_list,path,start,end,ip_obj):
print('thread %s is running...' % threading.current_thread().name)
ss = requests.session()
proxies = {ip_obj.type:"http://%s:%s" % (ip_obj.ip,ip_obj.port)}
thread_name = threading.current_thread().name
img_count = 0
for img_url in url_list[start:end]:
#time.sleep(1)
print "%s正在下载%d/%d张图" % (thread_name,img_count,end - start)
img_content = ss.get(img_url,proxies = proxies)
name = img_url.split(".")
with open(os.path.join(path,thread_name + "_"+str(img_count) +"."+name[-1]),'wb') as f:
f.write(img_content.content)
img_count = img_count + 1
time.sleep(5)
print('thread %s ended.' % threading.current_thread().name)

创建线程的代码:

thread_count = 0
thread = []
interval = len(url_list) / 30
start = 0
end = interval
while start < len(url_list):
t = threading.Thread(target=downloadImg,args=(url_list,path,start,end,ip_list[thread_count]),name="Thread" + str(thread_count))
thread.append(t)
start = end
end = end + interval
thread_count = thread_count + 1
for t in thread:
t.start()
for t in thread:
t.join()


...全文
158 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
屎克螂 2016-07-11
看着并没有什么问题 ss.get() 加个超时 线程设置一下setDaemon(True)
回复
同问~同学你解决了吗?
回复
Win_Man 2016-02-10
没有人吗
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2016-02-09 12:03
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: