今天用到是python自带的库: threading
Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,threading模块相较于thread模块,对于线程的操作更加的丰富,而且threading模块本身也是相当于对thread模块的进一步封装而成,thread模块有的功能threading模块也都有,所以涉及到对线程的操作,推荐使用threading模块。
使用工具:threading,time,requests
环境准备:
- 搭建python开发环境
- 若前期未安装requests库的话,需要安装一下
pip install requests
源码讲解环节
好的,下面就是喜闻乐见的源码讲解环节了(´◔౪◔)
import threading
import requests
import time
def down_loads(i,url):
header = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"}
r = requests.get(url, headers=header).content
with open(r'123\{}.jpg'.format(i), 'wb')as f:
print('正在下载第{}张图片'.format(i))
f.write(r)
list = ["1589955488pKXI8k7R_ZKj99T1.png","1589955488RTJR8dCxDnY6pwCw.png","1589955487Bnk_GpCbA8Sw6QBS.png","1589955486AdJQK8Qrsp_G1wn6.png"]
# 单线程
start1_time = time.time()
for i in range(len(list)):
url = 'https://res.xiaoqinre.com/' + 'images/comic/659/1316010/' + list[i]
down_loads(i, url)
end1_time = time.time()
# 多线程
print('============多线程=============')
start2_time = time.time()
for i in range(len(list)):
url = 'https://res.xiaoqinre.com/' + 'images/comic/659/1316010/' + list[i]
# 多线程调用方法,args传递参数
t = threading.Thread(target=down_loads, args=(i, url))
t.start()
# 等待所有进程结束后,再执行后面的代码
while threading.activeCount() != 1:
pass
end2_time = time.time()
print('单线程的耗时为:{}'.format(end1_time - start1_time))
print('多线程的耗时为:{}'.format(end2_time - start2_time))
多线程调用方法时,参数需要用args传递
t = threading.Thread(target=down_loads, args=(i, url))
t.start()
需要添加等待进程结束的代码,否则会在进程 start 后直接执行后面的代码
while threading.activeCount() != 1:
pass
效果展示
舒服೭(˵¯̴͒ꇴ¯̴͒˵)౨