天天看點

深入flask之異步非堵塞實作

官方其實已經給出了方案,隻不過藏的有點深,在加上網上有很多不太靠譜的文章誤導了我(當然不排除我沒了解的原因哈)。是以為了讓有些朋友的少走點彎路,也為給自己做個備忘。

完整代碼:https://github.com/wskssau/my_notespace的 python/todo_app

解決方案: flask+gevent

安裝gevent

pip install gevent
           

修改代碼

# 檔案頭部
from gevent import monkey
from gevent.pywsgi import WSGIServer

# 在玩websockets,可以無視之哈,有空貼下flask websockets實作哈
from geventwebsocket.handler import WebSocketHandler

import time

# gevent的猴子魔法
monkey.patch_all()

app = Flask(__name__)

app.config.update(
    DEBUG=True
)

@app.route('/asyn/1/', methods=['GET'])
def test_asyn_one():
    if request.method == 'GET':
        time.sleep()
        return 'hello asyn'


@app.route('/test/', methods=['GET'])
def test():
    return 'hello test'


if __name__ == "__main__":
    # app.run()
    http_server = WSGIServer(('', ), app, handler_class=WebSocketHandler)
    http_server.serve_forever()
           

運作之後可以先通路/asyn/1/再通路/test/,可以明顯發現,/asyn/1/在做耗時任務時不會影響其他請求