python---线程池

#需要处理很多数据  #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())




posted @ 2021-11-19 10:21  王王的王  阅读(56)  评论(0)    收藏  举报