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() ይጠበቃል። ያልተነበበ ምላሽ መዝጋት አቅም ይለቅቃል፣ ነገር ግን መሠረታዊውን ግንኙነት እንደገና ከመጠቀም ይልቅ መጣል ሊያስፈልግ ይችላል።
የልዩ ስህተቱን ስም ያንብቡ
ConnectTimeout ግንኙነት ከመመሥረት ጋር ይያያዛል። ReadTimeout የምላሽ ውሂብ ከመጠበቅ ጋር ይያያዛል። PoolTimeout የግንኙነት ቦታ ከማግኘት ጋር ይያያዛል። «የፕሮክሲ ጊዜ አለቀ» ብቻ መመዝገብ መፍትሔ ለመምረጥ የሚያስፈልገውን ልዩነት ያጠፋል።
የመገናኛ ነጥቦችን IP ከመቀየር በፊት ክፍት ምላሾችን፣ በአንድ ጊዜ የሚሠሩ ተግባሮችንና የግንኙነት ገደቦችን ይመልከቱ። ለተገቢ በአንድ ጊዜ የሚከናወን ጫና ትልቅ ስብስብ ሊስማማ ይችላል፣ ነገር ግን ፈጽሞ የማይዘጉ ምላሾችን አያስተካክልም። ለመተግበሪያው የሚይዘውን ተጨማሪ አቅም ብቻ ይሰጣል።
በመላው የሥራ ጫና ደንበኛውን እንደገና ለመጠቀም ያቆዩ። እያንዳንዱ ጥያቄ የሚሠራ እንዲመስል ደንበኛውን እንደገና መፍጠር የሕይወት ዑደት ችግርን ሊደብቅና የግንኙነት ድጋሚ አጠቃቀምን ሊያሳጣ ይችላል።