深入flask之非同步非堵塞實現
阿新 • • 發佈:2019-01-02
官方其實已經給出了方案,只不過藏的有點深,在加上網上有很多不太靠譜的帖子誤導了我(當然不排除我沒理解的原因哈)。所以為了讓有些朋友的少走點彎路,也為給自己做個備忘。
解決方案: 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(10)
return 'hello asyn'
@app.route('/test/', methods=['GET'])
def test():
return 'hello test'
if __name__ == "__main__":
# app.run()
http_server = WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
執行之後可以先訪問/asyn/1/再訪問/test/,可以明顯發現,/asyn/1/在做耗時任務時不會影響其他請求