最近项目中由于需要频繁调用高德地图的接口,发现采用单线程循环调用太慢了,于是上网查了一下Python的并发,于是决定采用ThreadPoolExecutor(线程池)做并发。
在此之前,先看一下,单线程循环爬取多个网页的耗时:
import time
import requests
import threading
def get_html(url):
print('thread id:',threading.currentThread().getName(),' 访问了:',url)
return requests.get(url)
if __name__ == '__main__':
URLS = ['http://www.baidu.com', 'http://www.qq.com', 'http://www.sina.com.cn', 'https://translate.google.cn', 'https://www.csdn.net']
start = time.time()
for url in URLS:
response = get_html(url)
print('url:%s ,len: %d' % (response.url, len(response.text)))
end = time.time()
print('耗时:'+str('%.2f'%(end - start))+'s')
运行结果如下,可以看到爬取5个网页采用单线程耗时5秒左右:
thread id: MainThread 访问