UVICORN是Python ASGI伺服器,可以用作各種Web框架的基礎。它是一個快速的Web框架,同時也支持Websockets和HTTP/2,因此它可以實現非常低的延遲和高吞吐量的應用。
一、UVICORN與Flask
Flask是一個輕量級的Python Web框架,非常適合搭建簡單的Web應用程序。相比之下,UVICORN則更加註重性能和擴展性,支持ASGI(Asynchronous Server Gateway Interface)協議,並通過asyncio來實現非同步編程,因此可以更好地利用多核CPU。這種設計特點使得UVICORN可以處理更多的請求並且保持同時響應更高。
下面是一個簡單的Flask程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
同樣的,下面是一個Hello World程序,在使用Flask變成ASGI伺服器過程中,對比UVICORN的變化:
from flask import Flask
from uvicorn.workers import UvicornWorker
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
flask_options = {"bind": "0.0.0.0:5000", "workers": 4}
UvicornWorker(app).run(**flask_options)
二、UVICORN 命令設置開機自啟
在生產伺服器中,通常需要設置自啟動命令使得工具、框架等能夠在伺服器重啟後自動啟動。對於UVICORN來說,我們可以通過systemd來實現此功能。
首先,在/etc/systemd/system目錄下新建一個uvicorn.service,編寫以下內容:
[Unit]
Description=Uvicorn Service
[Service]
User=root
Group=root
WorkingDirectory=/home/user/my_project
ExecStart=/usr/local/bin/uvicorn myproject.asgi:application
Restart=always
[Install]
WantedBy=multi-user.target
然後,使用以下命令重新載入systemctl並啟動UVICORN:
sudo systemctl daemon-reload
sudo systemctl start uvicorn.service
sudo systemctl enable uvicorn.service
這樣,UVICORN就會在伺服器啟動時自動啟動。
三、UVICORN FASTAPI
FastAPI是一個高性能而且易於使用的Web框架,基於ASGI協議並且使用Pydantic實現了請求和響應的序列化和校驗,還提供了自動生成OpenAPI文檔的功能。使用FastAPI和UVICORN可以實現非常高效的Web應用。
下面是一個簡單的FastAPI程序:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def read_root():
return {'Hello': 'World'}
同樣的,下面是一個使用FastAPI和UVICORN的Hello World程序,也可以在流行的Python Web框架中使用:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def read_root():
return {'Hello': 'World'}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
四、UVICORN Windows
UVICORN當然也可以在Windows平台上運行。可以通過以下命令來在Windows上運行:
python -m uvicorn myapp:app --host 127.0.0.1 --port 8000
這個命令將會運行UVICORN並響應127.0.0.1的8000埠。
五、UVICORN Running On
UVICORN也可以運行在不同的伺服器環境上,包括但不限於Gunicorn和Hypercorn。
下面是一個簡單的Gunicorn+UVICORN配置文件:
workers = 4
worker_class = 'uvicorn.workers.UvicornWorker'
bind = '0.0.0.0:8000'
然後執行以下命令即可啟動Gunicorn和UVICORN:
gunicorn -c gunicorn_conf.py myapp:app
除了Gunicorn,你也可以通過Hypercorn來運行UVICORN:
pip install hypercorn
hypercorn myapp:app --bind 0.0.0.0:8000
六、UVICORN FASTAPI用於生產
FastAPI是一個高性能且易用的Web框架,非常適合用於生產環境。使用FastAPI和UVICORN可以實現一個快速且高效的Web應用,同時它們也支持WebSocket和HTTP/2,這使得UVICORN和FastAPI在性能和易用性方面都非常優秀。
下面是一個FastAPI用於生產的Hello World程序:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def read_root():
return {'Hello': 'World'}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000, workers=4)
注意,我們通過添加workers參數來啟用多進程模式從而讓程序更加快速和健壯。同時,我們可以使用systemd來實現自啟動的功能,來確保服務在伺服器重啟時可用。
七、小結
通過上述的介紹,我們了解了UVICORN和FastAPI,這些工具和框架可以幫助我們快速開發和部署高效的Web應用。同時,我們也學習了如何在不同的平台上運行和部署UVICORN,包括Windows和Gunicorn等。無論是對於初學者還是有經驗的開發者,這些知識都是非常有用和寶貴的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/181813.html