HTTPX PoolTimeout ప్రాక్సీ కనెక్షన్ టైమ్ఔట్ కాదు
HTTPX కనెక్షన్ పూల్లో వేచి ఉండడాన్ని గుర్తించి, బహుశా తదుపరి అభ్యర్థన అందుకోని ప్రాక్సీని మార్చే ముందు స్ట్రీమింగ్ ప్రతిస్పందనలు విడుదల చేయండి.
PoolTimeout అంటే HTTPXకు అమర్చిన వేచి ఉండే సమయం లోపు పూల్ నుంచి కనెక్షన్ రాలేదు. ఇది ప్రాక్సీకి కొత్త TCP కనెక్షన్ టైమ్ఔట్ అయిందనే ఆధారం కాదు. రెండో అభ్యర్థన ఇంకా మీ ప్రాసెస్ లోపల వేచి ఉండవచ్చు.
క్లయింట్ ఒక్క కనెక్షన్ అనుమతించి మొదటి స్ట్రీమింగ్ ప్రతిస్పందన తెరిచి ఉంచితే దీన్ని సులభంగా పునరుత్పత్తి చేయవచ్చు. మరో అభ్యర్థన ప్రారంభించడం ఆ కనెక్షన్ను తానుగా విడుదల చేయదు.
స్ట్రీమింగ్ ప్రతిస్పందన బాధ్యతను స్పష్టంగా ఉంచండి
import httpx
limits = httpx.Limits(
max_connections=1,
max_keepalive_connections=1,
)
timeout = httpx.Timeout(
connect=5, read=10, write=10, pool=1
)
with httpx.Client(
proxy="http://203.0.113.10:8080",
trust_env=False,
limits=limits,
timeout=timeout,
) as client:
with client.stream("GET", "https://example.com/") as response:
print(response.status_code)
for chunk in response.iter_bytes():
print(len(chunk))
next_response = client.get("https://example.com/")
print(next_response.status_code)
నడిపే ముందు డాక్యుమెంటేషన్ ప్రాక్సీ చిరునామా మార్చండి. తదుపరి అభ్యర్థన స్ట్రీమ్ కాంటెక్స్ట్ నుంచి బయటకు వచ్చిన తర్వాత మొదలవుతుంది. కోడ్ లూప్ విడిచినా లేదా ఎక్సెప్షన్ ఇచ్చినా కాంటెక్స్ట్ నిష్క్రమణ ప్రతిస్పందన మూస్తుంది.
client.send(request, stream=True) వంటి మాన్యువల్ స్ట్రీమింగ్లో చివరకు మూయడం మీ కోడ్ బాధ్యత. AsyncClientకు సంబంధిత మాన్యువల్ క్లీన్అప్ response.aclose()ను await చేయడం ద్వారా జరుగుతుంది. చదవని ప్రతిస్పందన మూయడం సామర్థ్యం విడుదల చేస్తుంది, కానీ దిగువ కనెక్షన్ను మళ్లీ వాడకుండా వదులుకోవాల్సి రావచ్చు.
ఎక్సెప్షన్ పేరు చదవండి
ConnectTimeout కనెక్షన్ ఏర్పాటు గురించి. ReadTimeout ప్రతిస్పందన డేటా కోసం వేచి ఉండడం గురించి. PoolTimeout కనెక్షన్ స్లాట్ పొందడం గురించి. కేవలం «ప్రాక్సీ టైమ్ఔట్» నమోదు చేయడం సరైన పరిష్కారం ఎంచుకోవడానికి అవసరమైన తేడాను కోల్పోతుంది.
ఎండ్పాయింట్ IPలు మార్చే ముందు తెరిచిన ప్రతిస్పందనలు, సమకాలీన పనులు, కనెక్షన్ హద్దులు తనిఖీ చేయండి. సమంజస సమకాలీన భారానికి పెద్ద పూల్ తగినదే కావచ్చు, కానీ ఎప్పటికీ మూయని ప్రతిస్పందనలు సరిచేయదు. యాప్ ఆక్రమించడానికి మరింత సామర్థ్యం మాత్రమే ఇస్తుంది.
పని మొత్తం క్లయింట్ను మళ్లీ వాడదగినదిగా ఉంచండి. ప్రతి అభ్యర్థన పనిచేస్తున్నట్లు చూపడానికి క్లయింట్ మళ్లీ సృష్టించడం జీవితచక్ర సమస్య దాచి కనెక్షన్ పునర్వినియోగాన్ని కోల్పోవచ్చు.