HTTPX PoolTimeout er ikkje eit tilkoplingstidsavbrot til proxyen
Kjenn att venting i sambandspoolen til HTTPX, og frigjer strøymande svar før du byter ein proxy som kanskje aldri fekk neste førespurnad.
PoolTimeout tyder at HTTPX ikkje kunne få eit samband frå poolen innan den konfigurerte ventetida. Det beviser ikkje at eit nytt TCP-samband til proxyen fekk tidsavbrot. Den andre førespurnaden kan framleis vente inne i prosessen.
Dette er lett å gjenskape når klienten tillèt eitt samband, og det første strøymande svaret vert ståande ope. Å starte ein ny førespurnad frigjer ikkje det sambandet av seg sjølv.
Gjer ansvaret for strøymande svar synleg
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)
Byt ut dokumentasjonsadressa til proxyen før køyring. Neste førespurnad startar etter at straumkonteksten er avslutta. Det lukkar svaret òg om koden bryt ut av løkka eller kastar eit unntak.
Ved manuell strøyming, som client.send(request, stream=True), er koden din ansvarleg for den endelege lukkinga. For AsyncClient ventar ein på den tilsvarande manuelle oppryddinga med response.aclose(). Å lukke eit ulese svar frigjer kapasitet, men kan krevje at det underliggjande sambandet vert forkasta i staden for å verte brukt om att.
Les namnet på unntaket
ConnectTimeout gjeld etablering av samband. ReadTimeout gjeld venting på svardata. PoolTimeout gjeld å få ein sambandsplass. Å berre logge «proxytidsavbrot» mistar skiljet som trengst for å velje ei løysing.
Kontroller opne svar, samtidige oppgåver og sambandsgrenser før du byter endepunkt-IP-ar. Ein større pool kan passe til legitim samtidig belastning, men rettar ikkje svar som aldri vert lukka. Han gjev berre programmet meir kapasitet å ta opp.
Hald på klienten slik at han kan brukast om att gjennom arbeidsbelastninga. Å opprette ein ny klient for at kvar førespurnad skal sjå ut til å verke kan skjule eit livssyklusproblem og fjerne gjenbruk av samband.