Uvicorn/FastAPI में HTTP अनुरोध करना
FastAPI और Uvicorn का उपयोग करके निर्मित HTTP एंडपॉइंट को संभालते समय, बाहरी एपीआई से डेटा का अनुरोध करना आम बात है। हालाँकि, कई समवर्ती अनुरोधों से निपटते समय, "रोल = सर्वर और स्टेट = SEND_RESPONSE होने पर ईवेंट प्रकार कनेक्शन को संभाल नहीं सकता" जैसी त्रुटियां उत्पन्न हो सकती हैं। ऐसा इसलिए होता है क्योंकि डिफ़ॉल्ट HTTP क्लाइंट लाइब्रेरी, 'अनुरोध', ऐसे समवर्ती वातावरण में उपयोग किए जाने पर पूरी तरह से थ्रेड-सुरक्षित नहीं होती है।
इस समस्या को हल करने के लिए, httpx नामक वैकल्पिक HTTP क्लाइंट लाइब्रेरी को लागू करने पर विचार करें। यह एक एसिंक एपीआई प्रदान करता है जो फास्टएपीआई के भीतर थ्रेड सुरक्षा समस्याओं से बचने में मदद करता है। नीचे दिया गया उदाहरण दिखाता है कि फास्टएपीआई में httpx को कैसे नियोजित किया जाए:
from fastapi import FastAPI, Request, BackgroundTask from fastapi.responses import StreamingResponse, Response from contextlib import asynccontextmanager import httpx @asynccontextmanager async def lifespan(app: FastAPI): async with httpx.AsyncClient() as client: yield {'client': client} app = FastAPI(lifespan=lifespan) @app.get('/') async def home(request: Request): client = request.state.client req = client.build_request('GET', 'https://www.example.com') r = await client.send(req, stream=True) return StreamingResponse(r.aiter_raw(), background=BackgroundTask(r.aclose()))
httpx के एसिंक एपीआई का उपयोग करके, आप थ्रेड सुरक्षा बनाए रखते हुए फास्टएपीआई के भीतर HTTP अनुरोधों को अधिक कुशलता से संभाल सकते हैं। आप क्लाइंट ऑब्जेक्ट पर 'सीमाएं' कीवर्ड तर्क का उपयोग करके कनेक्शन पूल आकार को और अधिक अनुकूलित कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3