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 — на добивање место за врска. Запишување само «proxy timeout» ја губи разликата потребна за избор на поправка.

Пред промена на IP адреси на крајни точки проверете отворени одговори, истовремени задачи и ограничувања на врски. Поголем базен може да одговара на оправдано истовремено оптоварување, но не поправа одговори што никогаш не се затвораат. Само ѝ дава на апликацијата повеќе капацитет за зафаќање.

Задржете го клиентот за повторна употреба низ оптоварувањето. Создавањето нов клиент за секое барање да изгледа успешно може да скрие проблем со животниот циклус и да ја изгуби повторната употреба на врски.

Поврзани статии