PoolTimeout do të thotë se HTTPX nuk mori lidhje nga grupi brenda kohës së konfiguruar të pritjes. Nuk provon skadimin e një lidhjeje të re TCP me proxy-n. Kërkesa e dytë mund të jetë ende duke pritur brenda procesit tuaj.

Kjo përsëritet lehtë kur klienti lejon një lidhje dhe përgjigjja e parë streaming lihet e hapur. Nisja e një kërkese tjetër nuk e liron atë lidhje vetvetiu.

Bëjeni të qartë përgjegjësinë për përgjigjen streaming

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)

Zëvendësoni adresën e proxy-t të dokumentacionit para ekzekutimit. Kërkesa tjetër fillon pas daljes nga konteksti i stream-it. Kjo dalje e mbyll përgjigjen edhe nëse kodi ndërpret ciklin ose ngre përjashtim.

Në streaming manual, si client.send(request, stream=True), kodi juaj është përgjegjës për mbylljen përfundimtare. Për AsyncClient, pastrimi manual përkatës pritet me response.aclose(). Mbyllja e një përgjigjeje të palexuar liron kapacitet, por mund të kërkojë hedhjen poshtë të lidhjes bazë në vend të ripërdorimit.

Lexoni emrin e përjashtimit

ConnectTimeout lidhet me vendosjen e lidhjes. ReadTimeout lidhet me pritjen e të dhënave të përgjigjes. PoolTimeout lidhet me marrjen e një vendi lidhjeje. Regjistrimi vetëm i «proxy timeout» humb dallimin e nevojshëm për zgjedhjen e rregullimit.

Kontrolloni përgjigje të hapura, detyra të njëkohshme dhe kufijtë e lidhjeve para ndryshimit të IP-ve të pikave fundore. Një grup më i madh mund të përshtatet me ngarkesë të ligjshme të njëkohshme, por nuk rregullon përgjigje që nuk mbyllen kurrë. Vetëm i jep aplikacionit më shumë kapacitet për të zënë.

Mbajeni klientin të ripërdorshëm gjatë gjithë ngarkesës. Rikrijimi i tij që çdo kërkesë të duket se punon mund të fshehë një problem të ciklit të jetës dhe të humbë ripërdorimin e lidhjeve.

Artikuj të ngjashëm