Flask的基本使用:
环境安装:
pip install flask创建一个py源文件详细代码看 FlaskServer.py#!/usr/bin/env python3# -*- coding: utf-8 -*-from flask import Flask, render_templatefrom time import sleep# 实例化一个appapp = Flask(__name__)# 创建试图函数&路由地址@app.route('/bobo')def index_1(): sleep(2) return render_template('test.html')@app.route('/jay')def index_2(): sleep(2) return render_template('test.html')@app.route('/tom')def index_3(): sleep(2) return render_template('test.html')if __name__ == '__main__': # debug=True表示开启调试模式:服务器端代码被修改按下保存键会自动重启服务器 app.run(debug=True)运行后,就可以进去自己的网站了
线程池:
所谓多线程,官方解释自行了解。
不过用我们通俗的话打个比方就是: 多个人同时切菜。比起轮流切菜时间要短,效率要高!
线程池:打比方就是把这些人,这些工作放到一个厨房里,然后启用开始工作!
我们先来看下爬取刚才的Flask网站的 正常爬取步骤:
import timeimport requestsfrom multiprocessing.dummy import Pool# 把这些网站放进一个列表urls = [ 'http://127.0.0.1:5000/bobo', 'http://127.0.0.1:5000/jay', 'http://127.0.0.1:5000/tom']# 创建一个函数模板进行爬取def get_request(url): page_text = requests.get(url=url).text return len(page_text)# 运行执行代码if __name__ == '__main__': start = time.time() # 记录开始时间 for url in urls: print(get_request(url)) print('总耗时:', time.time() - start)上面就是单线程操作(轮流切菜模式),也叫做同步执行!我们来看下结果:
很显然,我们看到代码执行的时间是6秒左右,说明平均爬取一个网站的速度要2秒左右。
异步爬取:(多人同时切菜模式)
当爬取的网站越多,数据越大,耗时越长,这不是我们想要的。于是就有了多线程,多进程等
异步实现代码:
if __name__ == '__main__': start = time.time() pool = Pool(3) # 3 表示开启线程的数量 # 难点:pool.map。表示一个函数,依次调用参数,然后返回 # 使用get_request作为回调函数,需要基于异步的形式对urls列表中的每一个列表元素进行操作 # 保证回调函数必须要有一个参数和返回值 result_list = pool.map(get_request, urls) print(result_list) print('总耗时:', time.time() - start)pool.map不理解的话,可以去看下 Python里的map函数,类似的意思。
代码执行后,我们发现,总耗时才2秒!是不是提升了效率!
关注 Python涛哥!学习更多Python知识!