Rumah > pembangunan bahagian belakang > Tutorial Python > Adakah HTTPX Alternatif Lebih Selamat kepada ThreadPoolExecutor dalam FastAPI Endpoints?

Adakah HTTPX Alternatif Lebih Selamat kepada ThreadPoolExecutor dalam FastAPI Endpoints?

Linda Hamilton
Lepaskan: 2024-11-15 10:43:03
asal
394 orang telah melayarinya

Is HTTPX a Safer Alternative to ThreadPoolExecutor in FastAPI Endpoints?

Kebimbangan Konkuren ThreadPoolExecutor Penggunaan dalam FastAPI Endpoints

Masalah:

Concurrent.future.future ThreadPoolExecutor digunakan untuk pemprosesan selari, tetapi terdapat kebimbangan mengenai potensi kesannya dalam titik akhir FastAPI. Khususnya, jika berbilang panggilan API mencetuskan penciptaan terlalu banyak rangkaian, ia boleh mengakibatkan keletihan sumber dan ranap sistem.

Penyelesaian:

Daripada bergantung pada ThreadPoolExecutor, Pustaka HTTPX mempersembahkan alternatif yang lebih selamat dengan API asyncnya. Menggunakan HTTPX, anda boleh mencipta Klien dan menggunakannya semula untuk berbilang permintaan. Untuk melaksanakan operasi tak segerak, AsyncClient disyorkan.

Konfigurasi HTTPX:

HTTPX membenarkan penyesuaian saiz kolam sambungan dan tetapan tamat masa. Contohnya:

limits = httpx.Limits(max_keepalive_connections=5, max_connections=10)
async with httpx.AsyncClient(limits=limits) as client:
    ...
Salin selepas log masuk

Laraskan had dan nilai tamat masa agar sesuai dengan keperluan khusus anda.

Pelaksanaan Permintaan Asynchronous:

Untuk menjadikan berbilang tak segerak permintaan, anda boleh menggunakan asyncio.gather(). Ia akan menunggu penyiapan setiap permintaan dan mengembalikan senarai keputusan dalam susunan yang sama seperti tugasan yang disediakan.

Pengurusan Kitaran Hayat:

Untuk mengendalikan peristiwa jangka hayat dalam Aplikasi FastAPI, pertimbangkan untuk menggunakan kebergantungan jangka hayat. Ini membolehkan anda memulakan dan membersihkan sumber, seperti klien HTTPX, apabila aplikasi dimulakan dan dimatikan.

Tindak Balas Penstriman:

Jika anda perlu mengelak memuatkan keseluruhan respons ke dalam memori, pertimbangkan untuk menggunakan keupayaan penstriman HTTPX dan StreamingResponse FastAPI. Ini membolehkan anda memproses sebahagian daripada data tindak balas secara berulang, memberikan kebolehskalaan yang lebih baik.

Contoh Kod:

from fastapi import FastAPI, Request
from contextlib import asynccontextmanager
import httpx
import asyncio

URLS = ['https://www.foxnews.com/',
        'https://edition.cnn.com/',
        'https://www.nbcnews.com/',
        'https://www.bbc.co.uk/',
        'https://www.reuters.com/']

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Custom settings
    client = httpx.AsyncClient(...)
    yield {'client': client}
    await client.aclose()  # Close the client on shutdown

app = FastAPI(lifespan=lifespan)

async def send(url, client):
    return await client.get(url)

@app.get('/')
async def main(request: Request):
    client = request.state.client
    tasks = [send(url, client) for url in URLS]
    responses = await asyncio.gather(*tasks)
    # Process the responses as needed (e.g., extract data, modify content)
Salin selepas log masuk

Atas ialah kandungan terperinci Adakah HTTPX Alternatif Lebih Selamat kepada ThreadPoolExecutor dalam FastAPI Endpoints?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan