Flask的基本使用:
环境安装:
pip install flask
- 创建一个py源文件
- 详细代码看 FlaskServer.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from flask import Flask, render_template
from time import sleep
# 实例化一个app
app = 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 time
import requests
from 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知识!