协程池
import uuid
import gevent
from gevent import monkey, pool
import time, random
import urllib.request
monkey.patch_all()
jpg_num = 0
def down_load_img(img_uel, img_name):
global jpg_num
jpg_num += 1
print("正在下载第{}张".format(jpg_num))
img = urllib.request.urlopen(img_uel) # 设置网络连接
img_content = img.read() # 读取网址信息
# 设置一个新的文件并将信息写入
with open(r"%s" % img_name, "wb") as f1:
f1.write(img_content)
time.sleep(random.random())
time.sleep(2)
def main():
p = pool.Pool(50) # 创建协程池
url = 'https://www.google.com/imgres?imgurl=https%3A%2F%2Fpic2.cwuzx.com%2Fe390d4d07e852ebc2de3bbbbfd08bb31db705194-800.jpg&imgrefurl=https%3A%2F%2Fwww.cwuzx.com%2Fimage%2F24.html&tbnid=VTjovih6x09TsM&vet=12ahUKEwi4n_fHm5nqAhXwzIsBHWacBQ0QMygFegUIARCrAQ..i&docid=HC2ZQVVBJ4T2qM&w=650&h=432&q=%E7%8C%AB%E5%9B%BE%E7%89%87&ved=2ahUKEwi4n_fHm5nqAhXwzIsBHWacBQ0QMygFegUIARCrAQ'
ret_list = [url for i in range(0,1000)]
# 重置列表
num = 0
my_list = []
t_start = time.time() # 设置开始时间
for img_url in ret_list:
my_list.append(p.spawn(down_load_img, img_url, "%s.jpg" % str(uuid.uuid4())))
if num == 100: # 设置想要的下载文件数量
break
num += 1
gevent.joinall(my_list) # 添加任务到协程池
t_stop = time.time() # 设置结束时间
print("下载文件一共用了:%.2f秒" % (t_stop - t_start)) # 计时
if __name__ == '__main__':
main()
协程锁
协程锁官方文档: Synchronization Primitives — Python 3.10.2 documentation