欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python異步Web框架sanic的實(shí)現(xiàn)

 更新時(shí)間:2020年04月27日 14:23:25   作者:蟲師  
這篇文章主要介紹了python異步Web框架sanic的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們繼續(xù)學(xué)習(xí)Python異步編程,這里將介紹異步Web框架sanic,為什么不是tornado?從框架的易用性來說,F(xiàn)lask要遠(yuǎn)遠(yuǎn)比tornado簡單,可惜flask不支持異步,而sanic就是類似Flask語法的異步框架。

github:https://github.com/huge-success/sanic

不過sanic對(duì)環(huán)境有要求:

  • macOS/linux
  • python 3.6+

不過,我在macOS上安裝 sanic 還是踩了坑。依賴庫ujson一直安裝失敗。最后不得不卸載官方python,安裝 miniconda(第三方Python安裝包,集成了一些額外的工具)。

安裝 sanic

> pip3 install sanic

sanic 開發(fā)第一個(gè)例子

編寫官方的第一個(gè)例子hello.py

from sanic import Sanic
from sanic.response import json
from sanic.exceptions import NotFound


app = Sanic(name="pyapp")

@app.route('/')
async def test(request):
  return json({'hello': 'world'})


if __name__ == '__main__':
  app.error_handler.add(
    NotFound,
    lambda r, e: sanic.response.empty(status=404)
  )
  app.run(host='0.0.0.0', port=8000)

運(yùn)行上面的程序:

> python3 hello.py

[2020-04-21 23:12:02 +0800] [18487] [INFO] Goin Fast @ http://0.0.0.0:8000
[2020-04-21 23:12:02 +0800] [18487] [INFO] Starting worker [18487]

通過瀏覽器訪問:http://localhost:8000/

請(qǐng)求堵塞

針對(duì)上面的例子,假設(shè)test() 視圖函數(shù)的處理需要5秒鐘,那么請(qǐng)求就堵塞了。

from time import sleep

app = Sanic(name="pyapp")

@app.route('/')
async def test(request):
  sleep(5)
  return json({'hello': 'world'})

重啟服務(wù),通過瀏覽器發(fā)送請(qǐng)求,我們發(fā)現(xiàn)請(qǐng)求耗時(shí)5秒,這顯然對(duì)用戶就不能忍受的。

異步非堵塞

所以,我們要實(shí)現(xiàn)異步調(diào)用,修改后的完整代碼如下:

import asyncio
from sanic import Sanic
from sanic.response import json
from sanic.exceptions import NotFound
from time import sleep, ctime

app = Sanic(name="pyapp")

async def task_sleep():
  print('sleep before', ctime())
  await asyncio.sleep(5)
  print('sleep after', ctime())


@app.route('/')
async def test(request):
  myLoop = request.app.loop
  myLoop.create_task(task_sleep())
  return json({'hello': 'world'})


if __name__ == '__main__':
  app.error_handler.add(
    NotFound,
    lambda r, e: sanic.response.empty(status=404)
  )
  app.run(host='0.0.0.0', port=8000)

關(guān)于python異步的使用參考上一篇文章,重新啟動(dòng)服務(wù)。這次前端就不在堵塞了。

如果看 sanic 的運(yùn)行日志:

[2020-04-21 23:43:14 +0800] - (sanic.access)[INFO][127.0.0.1:57521]: GET http://localhost:8000/ 200 17
sleep before Tue Apr 21 23:43:14 2020
sleep after Tue Apr 21 23:43:19 2020

他仍然在執(zhí)行,但不會(huì)堵塞test()視圖函數(shù)的響應(yīng)。

思考:假如我的需求是:請(qǐng)求之后先告訴我已經(jīng)處理了,然后默默的去處理,什么時(shí)候處理來再主動(dòng)把處理的結(jié)果告訴。那么這就需要用到 websocket了。

到此這篇關(guān)于python異步Web框架sanic的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 異步 sanic內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬取網(wǎng)易云音樂上評(píng)論火爆的歌曲

    Python爬取網(wǎng)易云音樂上評(píng)論火爆的歌曲

    最近跟著網(wǎng)上教程學(xué)著用python爬取問題,于是就想試著扒一扒Python爬取網(wǎng)易云音樂上評(píng)論火爆的歌曲,下面這篇文章就主要介紹了利用Python如何爬取網(wǎng)易云音樂上那些評(píng)論火爆的歌曲,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • 關(guān)于生產(chǎn)消費(fèi)者模型中task_done()的具體作用

    關(guān)于生產(chǎn)消費(fèi)者模型中task_done()的具體作用

    這篇文章主要介紹了關(guān)于生產(chǎn)消費(fèi)者模型中task_done()的具體作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • django2.2 和 PyMySQL版本兼容問題

    django2.2 和 PyMySQL版本兼容問題

    這篇文章主要介紹了django2.2 和 PyMySQL版本兼容問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python基于Flask框架配置依賴包信息的項(xiàng)目遷移部署

    Python基于Flask框架配置依賴包信息的項(xiàng)目遷移部署

    這篇文章主要介紹了Python基于Flask框架配置依賴包信息的項(xiàng)目遷移部署小技巧,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-03-03
  • Django2.1.7 查詢數(shù)據(jù)返回json格式的實(shí)現(xiàn)

    Django2.1.7 查詢數(shù)據(jù)返回json格式的實(shí)現(xiàn)

    這篇文章主要介紹了Django2.1.7 查詢數(shù)據(jù)返回json格式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • plt.figure()參數(shù)使用詳解及運(yùn)行演示

    plt.figure()參數(shù)使用詳解及運(yùn)行演示

    這篇文章主要介紹了plt.figure()參數(shù)使用詳解及運(yùn)行演示,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • TensorFlow搭建神經(jīng)網(wǎng)絡(luò)最佳實(shí)踐

    TensorFlow搭建神經(jīng)網(wǎng)絡(luò)最佳實(shí)踐

    這篇文章主要為大家詳細(xì)介紹了TensorFlow搭建神經(jīng)網(wǎng)絡(luò)最佳實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python使用wxPython打開并播放wav文件的方法

    python使用wxPython打開并播放wav文件的方法

    這篇文章主要介紹了python使用wxPython打開并播放wav文件的方法,涉及Python操作音頻文件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • Python如何對(duì)音視頻文件進(jìn)行解析詳解

    Python如何對(duì)音視頻文件進(jìn)行解析詳解

    在腳本或應(yīng)用程序中,我們需要執(zhí)行音頻處理任務(wù),下面這篇文章主要給大家介紹了關(guān)于Python如何對(duì)音視頻文件進(jìn)行解析的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • python使用pandas進(jìn)行量化回測(cè)

    python使用pandas進(jìn)行量化回測(cè)

    這篇文章主要介紹了python使用pandas進(jìn)行量化回測(cè),文章圍繞pandas進(jìn)行量化回測(cè)的相關(guān)資料展開簡單內(nèi)容,文章內(nèi)容可以做一些比較簡單的技術(shù)指標(biāo)測(cè)試,需要的朋友可以參考一下
    2022-03-03

最新評(píng)論