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 қосылым орнын алуға қатысты. Тек «прокси тайм-ауты» деп жазу түзету таңдауға керек айырманы жоғалтады.

Қосылу нүктелерінің IP-лерін ауыстырмас бұрын ашық жауаптарды, қатар тапсырмаларды және қосылым шектерін тексеріңіз. Үлкен пул негізді қатар жүктемеге сай болуы мүмкін, бірақ ешқашан жабылмайтын жауаптарды түзетпейді. Ол тек қолданбаға толтыратын көбірек сыйымдылық береді.

Клиентті бүкіл жүктеме бойы қайта пайдалануға сақтаңыз. Әр сұрау жұмыс істейтіндей көрінуі үшін клиентті қайта жасау өмірлік цикл мәселесін жасырып, қосылымдарды қайта пайдалануды жоғалтуы мүмкін.

Қатысты мақалалар