深入flask之非同步非堵塞實現

2021-08-02 21:29:07 字數 900 閱讀 8214

** 

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

解決方案: flask+gevent

安裝gevent

pip install gevent
修改**

#coding=utf-8

from flask import flask, request

import time# 檔案頭部

from gevent import monkey

from gevent.pywsgi import wsgiserver

# 在玩websockets,可以無視之哈,有空貼下flask websockets實現哈

# from geventwebsocket.handler import websockethandler

import time

# gevent的猴子魔法

monkey.patch_all()

debug=true

)def

test_asyn_one

():if request.method == 'get':

time.sleep(10)

return

'hello asyn'

deftest

():return

'hello test'

if __name__ == "__main__":

http_server.serve_forever()

執行之後可以先訪問/asyn/1/再訪問/test/,可以明顯發現,/asyn/1/在做耗時任務時不會影響其他請求

IO模式 同步(堵塞 非堵塞) 非同步

為什麼io模式非常重要?由於現代的計算機和作業系統的架構決定了cpu是稀缺資源,大家都要來一起競爭。而io 特別是網路相關的io 的速度往往較慢。所以怎樣進行io就有了多種模式,包含同步 非同步 堵塞 非堵塞等等。不少人把這幾個概念放到一起討論,非常多時候也難以區分。這裡從根上剖析下該怎麼看待這幾個...

也談堵塞 非堵塞 同步 非同步

近期在招聘中,發現不少人對bio nio aio等理解非常模糊,認為有必要寫文章來糾正下非常多人的誤解。在談這些之前,非常有必要先介紹下unix 5種io模型 堵塞 堵塞是最經常使用的io模型,預設情況下全部的檔案操作都是堵塞的。以套接字程式設計為例。在程序空間中呼叫recvfrom。其系統呼叫直到...

php socket 同步非同步堵塞非堵塞的區別

php socket 同步非同步堵塞非堵塞的區別 從accept接受資料開始 同步就是 服務端從客戶端接受完資料 處理 然後傳送給客戶端了 然後再開始接收新的客戶端發來的資料 非同步就是 服務端從客戶端接受完資料 就可以再次繼續接收 非同步處理資料 堵塞就是 服務端堵塞執行緒狀態接收資料 read ...