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
Linda Hamiltonasal
2024-11-15 10:43:03365semak imbas

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:
    ...

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)

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:
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