Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memulakan dan Menggunakan Semula Objek Global dengan Cekap Merentas Semua Titik Tamat FastAPI?

Bagaimana untuk Memulakan dan Menggunakan Semula Objek Global dengan Cekap Merentas Semua Titik Tamat FastAPI?

Linda Hamilton
Linda Hamiltonasal
2024-12-02 21:07:16682semak imbas

How to Efficiently Initialize and Reuse a Global Object Across All FastAPI Endpoints?

Cara Memulakan dan Menggunakan Semula Objek Global atau Pembolehubah dalam Setiap Titik Akhir FastAPI

Apabila membuat klien pemberitahuan yang memerlukan sambungan awal , adalah penting untuk mencari cara yang cekap untuk menggunakannya merentas semua titik akhir untuk mengelakkan kelewatan prestasi. Kami membentangkan dua pendekatan yang berpotensi untuk menangani senario ini.

Pilihan 1: Menggunakan App.state

Menggunakan atribut app.state, seseorang boleh menyimpan objek kelas tersuai di luar fail utama. Ini membolehkan untuk mengakses klien pemberitahuan melalui objek Permintaan, walaupun semasa bekerja dengan submodul yang menggunakan APIRouter. Adalah mungkin untuk memulakan objek menggunakan sama ada acara permulaan yang telah tidak digunakan lagi atau fungsi jangka hayat.

Contoh:

from fastapi import FastAPI, Request
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: FastAPI):
    app.state.n_client = NotificationClient()
    yield
    app.state.n_client.close()

app = FastAPI(lifespan=lifespan)

@app.get('/')
async def main(request: Request):
    n_client = request.app.state.n_client
    # ...

Pilihan 2: Menggunakan Jangka Hayat Starlette Pengendali

Dengan pengenalan pengendali jangka hayat Starlette, pemulaan dan penggunaan objek boleh diuruskan dalam keadaan permintaan. Pengendali ini juga menyediakan fungsi permulaan dan penutupan. Dengan menambahkan objek yang dimulakan pada kamus keadaan, ia boleh diakses dalam titik akhir menggunakan request.state.

Contoh:

from fastapi import FastAPI, Request
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: FastAPI):
    n_client = NotificationClient()
    yield {'n_client': n_client}
    n_client.close()

app = FastAPI(lifespan=lifespan)

@app.get('/')
async def main(request: Request):
    n_client = request.state.n_client
    # ...

Kedua-dua pendekatan menawarkan berkesan penyelesaian untuk menggunakan semula objek atau pembolehubah global dalam titik akhir FastAPI. Pilihan yang paling sesuai dengan aplikasi tertentu bergantung pada keperluan dan seni bina khusus.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan dan Menggunakan Semula Objek Global dengan Cekap Merentas Semua Titik Tamat FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn