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