Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengoptimumkan Kelajuan Pengambilan Data JSON dalam FastAPI?

Bagaimana untuk Mengoptimumkan Kelajuan Pengambilan Data JSON dalam FastAPI?

DDD
DDDasal
2024-10-18 22:58:30454semak imbas

How to Optimize JSON Data Retrieval Speed in FastAPI?

Mengoptimumkan Kelajuan Pengambilan Data JSON dalam FastAPI

Pemulangan muatan JSON yang lembap daripada titik akhir GET FastAPI ialah isu yang berulang. Apabila menggunakan json.dumps() untuk menghantar data daripada fail menggunakan json.loads(), tindak balas sangat tertangguh. Walaupun data pemulangan boleh digunakan untuk menghantar data kepada pengguna, adakah terdapat pendekatan yang lebih cekap?

Masalah:
Saluran pemprosesan pada mulanya mengubah data menjadi JSON menggunakan panda' to_json () fungsi, kemudian memuatkannya ke dalam kamus dengan json.loads(), dan akhirnya menterjemahkannya kembali kepada JSON. Proses penukaran berbilang langkah ini memperkenalkan kependaman yang ketara.

Penyelesaian Cadangan:

Pertama, adalah penting untuk menyedari bahawa FastAPI menukar nilai pulangan kepada data yang serasi dengan JSON menggunakan jsonable_encoder, diikuti dengan bersiri menggunakan fungsi json.dumps() Python standard. Proses dua langkah ini diketahui lambat.

Pilihan 1: Gunakan Pengekod JSON Alternatif
Pertimbangkan untuk menggunakan pengekod JSON alternatif seperti orjson atau ujson. Pengekod ini mengatasi gabungan jsonable_encoder dan json.dumps() lalai.

Pilihan 2: Pulangan Terus bagi Respons Tersuai
Untuk prestasi optimum, gunakan kelas APIRoute tersuai dan kembalikan Respons objek. Ini memintas proses penukaran JSON lalai FastAPI.

<code class="python">from fastapi.routing import APIRouter, APIRoute

class TimedRoute(APIRoute):
    ...

app = FastAPI()
router = APIRouter(route_class=TimedRoute)

@router.get("/custom-response")
def get_data():
    df = pd.read_parquet('data.parquet')
    return Response(df.to_json(orient="records"), media_type="application/json")

app.include_router(router)</code>

Pertimbangan Tambahan:

  • Strim Balas: Pertimbangkan untuk menggunakan respons strim jika mengendalikan set data yang sangat besar boleh menyebabkan masalah kehabisan ingatan.
  • Dask Library: Gunakan Dask untuk memproses sejumlah besar data dengan cekap. Tukar Dask DataFrame yang terhasil kepada Pandas DataFrame sebelum menggunakan .to_json().
  • Muat Turun Fail: Tetapkan pengepala Pelupusan Kandungan untuk menunjukkan bahawa respons harus dimuat turun sebagai fail, memintas kelewatan pemaparan penyemak imbas.

Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Kelajuan Pengambilan Data JSON dalam 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