作為一款異步 Python 3.7+ web 框架,Sanic 最基本的構建塊是 Python 標準庫中的 asyncio 模塊。
2014 年初發布的 Python 3.4 是在新添加的 asyncio 模塊中將協程概念引入標準庫的第一步。使用標準的 Python 生成器,可以在發生其他事情時暫停函數的執行,然后可以將數據注入該函數以使其恢復執行。如果那時有一個對象“循環”通過需要工作的任務列表,我們可以同時進入和退出多個函數的執行。這可以在單個線程中實現“并發”,并且是 asyncio 思想的基礎。
快速瀏覽一下 Python 3.4 中的異步編程是什么樣的:
import asyncio
@asyncio.coroutine
def get_value():
yield from asyncio.sleep(1)
return 123
@asyncio.coroutine
def slow_operation():
value = yield from get_value()
print(">>", value)
loop = asyncio.get_event_loop()
loop.run_until_complete(slow_operation())
loop.close()
運行結果:DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead,可以看到 Python 3.8 中這種使用方式被取消了。
現在的用法是使用 async def 開頭:
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
print(f"started at {time.strftime('%X')}")
await say_after(1, 'hello')
await say_after(2, 'world')
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
輸出結果:
started at 23:39:52
hello
world
finished at 23:39:55
新的 asyncio 模塊的語言和語法都非常強大,但有點笨拙。對于經驗不足的 Python 開發人員來說,生成器通常有點神秘和困難。收益究竟來自什么?這東西對很多人來說都是陌生的;Python 需要更好的語法。
Sanic 框架
經典的 Django 和 Flask 是一種同步的框架,而沒有一種異步框架。
2016 年夏天,Sanic 的誕生就是為了探索這個差距。這個想法很簡單:我們可以從 Flask 中獲取一個帶有看起來很簡單的 API 的應用程序并使其異步/等待嗎?
不知何故,這個想法起飛并獲得了認可。這不是一個最初以重做 Python 應用程序處理 Web 請求的方式為目標的項目。這在很大程度上是一個意外暴露的案例。該項目迅速爆發并引起了轟動。讓 Flask 采用這種新模式有很大的吸引力。但是,由于 Flask 本身無法做到這一點,所以很多人認為 Sanic 可能是 Flask 的異步版本。
開發人員很高興有機會使用最新的 Python 為他們的應用程序帶來全新的性能水平。
Sanic 的目的:提供一個簡單的方法來啟動和運行一個高性能的HTTP服務器,該服務器易于構建、擴展,并最終擴展。
Sanic的口號是。"快速建設??焖龠\行"(Build fast.Run fast)。這當然強調了項目的性能導向。它也說明了一個目標,即在Sanic中構建一個應用程序是為了讓人感到直觀。啟動和運行一個應用程序不應該意味著要學習一套復雜的API,并且要不斷地打開第二個瀏覽器窗口查看文檔。當其他工具大量使用 "黑匣子 "式的功能,如全局變量、"魔法 "導入和猴子補丁時,Sanic通常更傾向于朝編寫好的、干凈的和習慣性的 Python(又稱pythonic代碼)方向發展。如果你知道 Python,你可以用 Sanic 構建一個網絡 API。
比如我們來看一個簡單的 Hello World例子。
Hello World Example
首先使用 pip3 install sanic 命令安裝 sanic 模塊。
Installing collected packages: aiofiles, websockets, httptools, sanic-routing, multidict, sanic
Successfully installed aiofiles-0.8.0 httptools-0.4.0 multidict-6.0.2 sanic-22.3.0 sanic-routing-22.3.0 websockets-10.2
Sanic() 是最基礎的組成部分,通常我們會在一個名為 server.py 的文件中將其實例化,當然文件名稱并不是必須的, 但是我們還是推薦使用 server.py 做為文件名稱來實例化 Sanic 對象。
from sanic import Sanic
from sanic.response import json
app = Sanic("MyHelloworldapp")
@app.route('/')
async def test(request):
return json({'hello': 'world'})
if __name__ == '__main__':
app.run()
Sanic 通過 sanic server.app 命令來運行:
以上就是“使用 Sanic 框架進行 Python Web 開發教程”的詳細內容,想要了解更多Python教程歡迎持續關注編程學習網。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.stbrigidsathleticclub.com/post/11312/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料
查 看2022高級編程視頻教程免費獲取