PoolTimeout erroreak esan nahi du HTTPX-k ez duela konexiorik lortu bere multzotik konfiguratutako itxaronaldian. Ez du frogatzen proxyarekiko TCP konexio berri batek denbora-muga gainditu duenik. Bigarren eskaera oraindik prozesuaren barruan zain egon daiteke.

Erraz erreproduzitzen da bezeroak konexio bakarra onartzen duenean eta lehen streaming erantzuna irekita uzten denean. Beste eskaera bat hasteak ez du konexio hori berez askatzen.

Argi utzi streaming erantzunaren ardura

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)

Exekutatu aurretik ordeztu dokumentazioko proxy-helbidea. Hurrengo eskaera streamaren testuingurutik irten ondoren hasten da. Irteerak erantzuna ixten du, nahiz eta kodeak begizta eten edo salbuespen bat bota.

Eskuzko streamingean, adibidez client.send(request, stream=True), zure kodeak du azken ixtearen ardura. AsyncClient-en dagokion eskuzko garbiketari response.aclose() bidez itxaroten zaio. Irakurri gabeko erantzuna ixteak edukiera askatzen du, baina azpiko konexioa baztertu behar izatea ekar dezake, berrerabili beharrean.

Irakurri salbuespenaren izena

ConnectTimeout konexioa ezartzeari dagokio. ReadTimeout erantzun-datuen zain egoteari. PoolTimeout konexio-tokia lortzeari. «Proxyaren denbora-muga» bakarrik erregistratzeak konponketa aukeratzeko behar den bereizketa galtzen du.

Amaiera-puntuen IPak aldatu aurretik, egiaztatu irekitako erantzunak, aldi bereko zereginak eta konexio-mugak. Multzo handiagoa egokia izan daiteke benetako aldi bereko kargarako, baina ez ditu inoiz ixten ez diren erantzunak konpontzen. Aplikazioari okupatzeko edukiera gehiago ematen dio soilik.

Mantendu bezeroa berrerabilgarri lan-karga osoan. Eskaera bakoitzak funtzionatzen duela emateko bezeroa berreraikitzeak bizi-zikloaren arazo bat ezkuta dezake eta konexioen berrerabilera galdu.

Erlazionatutako artikuluak