天天看點

Flask實作異步伺服器

Flask的服務, 預設是同步的, 是以以下代碼, 在接收多個請求是會發生阻塞的, 導緻打開頁面變得很慢, 很卡: 

# -*- coding: utf-8 -*-
from flask import Flask
import requests
import random
from datetime import datetime
app = Flask(__name__)
urls = ['https://www.python.org/','https://www.yahoo.com/','https://github.com/']
@app.route('/')
def index():
    time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    respond = requests.get(urls[int(random.random()*3)]).content.decode()
    print(time+' -- '+ str(len(respond)))
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S --")+ str(len(respond))
app.run('127.0.0.1',5000)
           

比較簡便的實作異步的方式就是借助第三方庫: gevent

# -*- coding: utf-8 -*-
from gevent import monkey
from gevent import pywsgi
monkey.patch_all()
from flask import Flask
import requests
import random
from datetime import datetime

app = Flask(__name__)

urls = ['https://www.python.org/','https://www.yahoo.com/','https://github.com/']

@app.route('/')
def index():
    time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    respond = requests.get(urls[int(random.random()*3)]).content.decode()
    print(time+' -- '+ str(len(respond)))
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S --")+ str(len(respond))

server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)
server.serve_forever()