Flask的基本使用:
環(huán)境安裝:
pip install flask創(chuàng)建一個py源文件詳細代碼看 FlaskServer.py#!/usr/bin/env python3# -*- coding: utf-8 -*-from flask import Flask, render_templatefrom time import sleep# 實例化一個appapp = Flask(__name__)# 創(chuàng)建試圖函數(shù)&路由地址@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表示開啟調(diào)試模式:服務(wù)器端代碼被修改按下保存鍵會自動重啟服務(wù)器 app.run(debug=True)運行后,就可以進去自己的網(wǎng)站了
線程池:
所謂多線程,官方解釋自行了解。
不過用我們通俗的話打個比方就是: 多個人同時切菜。比起輪流切菜時間要短,效率要高!
線程池:打比方就是把這些人,這些工作放到一個廚房里,然后啟用開始工作!
我們先來看下爬取剛才的Flask網(wǎng)站的 正常爬取步驟:
import timeimport requestsfrom multiprocessing.dummy import Pool# 把這些網(wǎng)站放進一個列表urls = [ 'http://127.0.0.1:5000/bobo', 'http://127.0.0.1:5000/jay', 'http://127.0.0.1:5000/tom']# 創(chuàng)建一個函數(shù)模板進行爬取def get_request(url): page_text = requests.get(url=url).text return len(page_text)# 運行執(zhí)行代碼if __name__ == '__main__': start = time.time() # 記錄開始時間 for url in urls: print(get_request(url)) print('總耗時:', time.time() - start)上面就是單線程操作(輪流切菜模式),也叫做同步執(zhí)行!我們來看下結(jié)果:
很顯然,我們看到代碼執(zhí)行的時間是6秒左右,說明平均爬取一個網(wǎng)站的速度要2秒左右。
異步爬取:(多人同時切菜模式)
當爬取的網(wǎng)站越多,數(shù)據(jù)越大,耗時越長,這不是我們想要的。于是就有了多線程,多進程等
異步實現(xiàn)代碼:
if __name__ == '__main__': start = time.time() pool = Pool(3) # 3 表示開啟線程的數(shù)量 # 難點:pool.map。表示一個函數(shù),依次調(diào)用參數(shù),然后返回 # 使用get_request作為回調(diào)函數(shù),需要基于異步的形式對urls列表中的每一個列表元素進行操作 # 保證回調(diào)函數(shù)必須要有一個參數(shù)和返回值 result_list = pool.map(get_request, urls) print(result_list) print('總耗時:', time.time() - start)pool.map不理解的話,可以去看下 Python里的map函數(shù),類似的意思。
代碼執(zhí)行后,我們發(fā)現(xiàn),總耗時才2秒!是不是提升了效率!
關(guān)注 Python濤哥!學(xué)習(xí)更多Python知識!
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長刪除。
轉(zhuǎn)載請注明出處http://macbookprostickers.com/xintu/9291.html