Rumah > Artikel > pembangunan bahagian belakang > Adakah menggunakan `concurrent.futures.ThreadPoolExecutor` dalam titik akhir FastAPI berisiko?
Adakah Berisiko Menggunakan Concurrent.futures.ThreadPoolExecutor dalam Titik Akhir FastAPI?
Pernyataan Masalah:
Dalam kod ujian yang disediakan, ThreadPoolExecutor digunakan untuk mendapatkan semula data daripada berbilang tapak web secara serentak. Kebimbangannya ialah menggunakan pendekatan ini dalam titik akhir FastAPI boleh menyebabkan penciptaan benang yang berlebihan dan potensi isu seperti kebuluran sumber dan ranap aplikasi.
Kebimbangan dan Potensi Gotchas:
Penyelesaian Disyorkan: Menggunakan Perpustakaan HTTPX
Daripada menggunakan ThreadPoolExecutor, adalah dinasihatkan untuk menggunakan perpustakaan HTTPX, yang menawarkan API tak segerak. HTTPX menyediakan beberapa kelebihan:
Contoh Berfungsi:
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): # Customise settings limits = httpx.Limits(max_keepalive_connections=5, max_connections=10) timeout = httpx.Timeout(5.0, read=15.0) # 5s timeout on all operations # Initialise the Client on startup and add it to the state async with httpx.AsyncClient(limits=limits, timeout=timeout) as client: yield {'client': client} # The Client closes 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) return [r.text[:50] for r in responses] # For demo purposes, only return the first 50 chars of each response
Coretan kod ini menunjukkan penggunaan HTTPX dengan FastAPI untuk mengendalikan permintaan serentak secara tidak segerak, dengan berkesan mengurangkan kebimbangan yang berkaitan dengan keletihan benang dan pertikaian sumber.
Atas ialah kandungan terperinci Adakah menggunakan `concurrent.futures.ThreadPoolExecutor` dalam titik akhir FastAPI berisiko?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!