PoolTimeout beteken dat HTTPX nie binne die ingestelde wagtyd ’n verbinding uit sy poel kon kry nie. Dit bewys nie dat ’n nuwe TCP-verbinding na die instaanbediener uitgetel het nie. Die tweede versoek wag moontlik nog binne jou proses.

Dit is maklik om te herhaal wanneer ’n kliënt een verbinding toelaat en die eerste stroomantwoord oopgelaat word. Om ’n ander versoek te begin, maak nie daardie verbinding vanself vry nie.

Maak die verantwoordelikheid vir stroomantwoorde sigbaar

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)

Vervang die dokumentasieadres van die instaanbediener voordat jy dit uitvoer. Die volgende versoek begin nadat die stroomkonteks verlaat is. Dit sluit die antwoord selfs as die kode uit die lus breek of ’n uitsondering opwerp.

By handmatige stroming, soos client.send(request, stream=True), is jou kode verantwoordelik vir die uiteindelike sluiting. Vir AsyncClient word die ooreenstemmende handmatige opruiming met response.aclose() afgewag. Om ’n ongeleesde antwoord te sluit, maak kapasiteit vry maar kan vereis dat die onderliggende verbinding weggegooi word eerder as hergebruik.

Lees die uitsondering se naam

ConnectTimeout gaan oor die opstel van ’n verbinding. ReadTimeout gaan oor die wag vir antwoorddata. PoolTimeout gaan oor die verkryging van ’n verbindingsplek. Om net «instaanbediener-uitteltyd» te log, verloor die onderskeid wat nodig is om ’n oplossing te kies.

Kontroleer oop antwoorde, gelyktydige take en verbindingsperke voordat jy eindpunt-IP’s wissel. ’n Groter poel kan gepas wees vir ’n geldige gelyktydige werkslading, maar herstel nie antwoorde wat nooit gesluit word nie. Dit gee die toepassing net meer kapasiteit om te beset.

Hou die kliënt herbruikbaar deur die werkslading. Om ’n kliënt vir elke versoek te herbou sodat dit lyk of dit werk, kan ’n lewensiklusprobleem versteek en verbindingshergebruik prysgee.

Verwante artikels