#需要处理很多数据 #1000->30
#最大多少数据,告诉线程池我有多少任务去处理
from concurrent.futures import ThreadPoolExecutor
import requests
import hashlib
import threading
def down_pic(url):
print("开始下载",url)
r = requests.get(url)
file_name = hashlib.md5(url.encode()).hexdigest() + '.jpg'
with open(file_name, 'wb') as fw:
fw.write(r.content)
print("%s下载结束"%url)
pool = ThreadPoolExecutor(max_workers=5) #线程池 5 指定多少线程
urls = ['http://sky.nnzhp.cn/static/avatar/default.jpg',
'http://sky.nnzhp.cn/static/avatar/labi.jpg',
'http://sky.nnzhp.cn/static/avatar/login.jpg',
'http://sky.nnzhp.cn/static/avatar/%E7%8B%97%E5%A4%B42.jpg',
'http://sky.nnzhp.cn/static/avatar/wsj.jpg',
'http://sky.nnzhp.cn/static/avatar/demo1.png'
] * 50
#1循环方法
# for url in urls:
# ret = pool.submit(down_pic,url) #传一个参数
# print(ret) #看一下总共多少线程
# print(threading.activeCount())
#2自动取循环
#如果有返回值用这种方法,看def下面有没有
#如果有就去接收多来,没有直接执行下边
result = pool.map(down_pic,urls) #自动去循环这个list
print(result)
for r in result:
print(r)
while threading.activeCount()!=0:#等待,等执行完再去操作
pass
print(threading.activeCount())