"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > यूविकॉर्न का उपयोग करके फास्टएपीआई में समवर्ती HTTP अनुरोध करते समय मैं "कनेक्शनक्लोज्ड" त्रुटियों से कैसे बच सकता हूं?

यूविकॉर्न का उपयोग करके फास्टएपीआई में समवर्ती HTTP अनुरोध करते समय मैं "कनेक्शनक्लोज्ड" त्रुटियों से कैसे बच सकता हूं?

2024-12-21 को प्रकाशित
ब्राउज़ करें:362

How Can I Avoid

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