理解Python中Sanic與async/await

  • Python異步編程演化

    Python版本 關鍵字 作用
    3.4 asyncio 支持異步IO的標準庫
    3.5 async/await 語法糖,增加異步編程友好度
    3.6 穩定版asyncio
  • Sanic

    Sanic是一個支持async/await語法的異步無阻塞框架。

    Sanic使用uvloop作爲asyncio的事件循環:

    • 關於uvloop參見《理解Sanic中的uvloop》;

    • 關於事件循環參見《理解Python異步中的事件循環(asyncio管理事件循環)》;

    • 關於結構的具體步驟,參見2;

    Sanic處理函數必須要使用async def語法定義,因爲他們是異步函數

  • Sonic Request對象

    包含了客戶端(瀏覽器)發過來的HTTP請求的各類數據。包含以下屬性:

    屬性 使用方式 意義
    json request.json 當客戶端POST來的數據是json格式時,訪問json數據
    args request.args 查詢字符串變量,即URL中問號?機器後面的部分
    files 字典 擁有name、body和type的文件對象的字典
    form 字典 以POST方式傳遞的form變量
    body 字節串 POST的原始數據

    其它還有:headersmethodipportsocketappurlschemehostpathquery_stringuri_templatetoken

    request對象是web應用要處理的對象,它包含了客戶端(瀏覽器)的請求數據,通過它的各種屬性來訪問這些請求數據。

  • sanic.response子模塊

    用於生成HTTP響應,可以生成純文本(Plain Text,response.text())、HTML、JSON、文件(File)、數據流(Streaming)、文件流(File Streaming)、重定向(Redirect)、生數據(Raw)。

    所有返回的響應都是一個HTTPResponse類(或StreamingHTTPRsponse類),兩者都派生自BaseHTTPResponse類。

  • 關於路由

  • url_for方法建立URL

    基於處理函數名來生成URL,類似eval對字符串的處理,當然並不一樣。

  • WebSocket路由

    通過@app.websocket裝飾器或app.add_websocket_route方法定義。

    websocekt路由的處理函數有兩個參數:request、websocket協議對象(有send、recv兩個方法)

  • Reference

  1. Sanic教程:快速開始
  2. 使用Python進行併發編程-asyncio篇(三)
  3. 猿人學Python
  4. Sanic文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章