python-多线程-初识



今天用到是python自带的库: threading

Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,threading模块相较于thread模块,对于线程的操作更加的丰富,而且threading模块本身也是相当于对thread模块的进一步封装而成,thread模块有的功能threading模块也都有,所以涉及到对线程的操作,推荐使用threading模块。

使用工具:threading,time,requests




环境准备:


  1. 搭建python开发环境
  2. 若前期未安装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


效果展示


舒服೭(˵¯̴͒ꇴ¯̴͒˵)౨





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。