UVICORN概述

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-hk/n/181813.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-23 06:43
下一篇 2024-11-23 06:43

相關推薦

發表回復

登錄後才能評論